c语言如何对字符串进行位置查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言如何对字符串进行位置查询相关的知识,希望对你有一定的参考价值。

【问题描述】编写一个函数strrindex(s,t),用于返回字符串t在字符串s中最右边出现的位置.该位置从0开始计数,如果s中不含有t,那么返回-1;在你编写的程序中,使用strrindex(s,t)函数,输入t,s,输出t在s最右边的位置.
【输入形式】控制台分行输入字符串s,t.
【输出形式】控制台输出一个整数,是t在s最右边出现的位置.
【样例输入】The strdup() function new returns a pointer to a new string
new
【样例输出】49

包含文件:string.h

函数名: strstr

函数原型:

extern char *strstr(char *str1, const char *str2);

语法:* strstr(str1,str2)

str1: 被查找目标 string expression to search.

str2: 要查找对象 The string expression to find.

返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。

例子:

char str[]="1234xyz";
char *str1=strstr(str,"34");
cout << str1 << endl;

显示的是: 34xyz

函数实现

1.Copyright 1990 Software Development Systems, Inc.

char *strstr(const char *s1,const char *s2)

 int len2;
 if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
  return(char*)s1;
 for(;*s1;++s1)
 
 if(*s1==*s2 && strncmp(s1,s2,len2)==0)
 return(char*)s1;
 
 return NULL;


2.Copyright 1986 - 1999 IAR Systems. All rights reserved

char *strstr(constchar*s1,constchar*s2)

int n;
if(*s2)

while(*s1)

for(n=0;*(s1+n)==*(s2+n);n++)

if(!*(s2+n+1))
return(char*)s1;

s1++;

return NULL;

else
return (char*)s1;


3. GCC-4.8.0

char *strstr(const char*s1,const char*s2)

const char*p=s1;
const size_tlen=strlen(s2);
for(;(p=strchr(p,*s2))!=0;p++)

if(strncmp(p,s2,len)==0)
return (char*)p;

return(0);


应用举例

// strstr.c

#include <syslib.h>
#include <string.h>
main()

char *s="GoldenGlobalView";
char *l="lob";
char *p;
clrscr();
p=strstr(s,l);
if(p)
printf("%s",p);
else
printf("NotFound!");
getchar();
return0;


//功能:从字串” string1 onexxx string2 oneyyy”中寻找”yyy”

(假设xxx和yyy都是一个未知的字串)

char *s=”string1onexxxstring2oneyyy”;
char *p;
p=strstr(s,”yyy”);
if(p!=NULL)
printf(“%s”,p);
else
printf("notfound\n");

说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy

char *mystrstr(char*s1,char*s2)

if(*s1==0)

if(*s2)
return (char*)NULL;
return (char*)s1;

while(*s1)

int i=0;
while(1)

if(s2[i]==0)
return s1;
if(s2[i]!=s1[i])
break;
i++;

s1++;

return (char*)NULL;
参考技术A 包含文件:string.h
函数名:
strstr
函数原型:
extern
char
*strstr(char
*str1,
const
char
*str2);
语法:*
strstr(str1,str2)
str1:
被查找目标 string
expression
to
search.
str2:
要查找对象 The
string
expression
to
find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
例子:
char
str[]="1234xyz";
char
*str1=strstr(str,"34");
cout
<<
str1
<<
endl;
显示的是:
34xyz
函数实现
1.Copyright
1990
Software
Development
Systems,
Inc.
char
*strstr(const
char
*s1,const
char
*s2)

 int
len2;
 if(!(len2=strlen(s2)))//此种情况下s2不能指向空,否则strlen无法测出长度,这条语句错误
 
return(char*)s1;
 for(;*s1;++s1)
 
 if(*s1==*s2
&&
strncmp(s1,s2,len2)==0)
 return(char*)s1;
 
 return
NULL;

2.Copyright
1986
-
1999
IAR
Systems.
All
rights
reserved
char
*strstr(constchar*s1,constchar*s2)

int
n;
if(*s2)

while(*s1)

for(n=0;*(s1+n)==*(s2+n);n++)

if(!*(s2+n+1))
return(char*)s1;

s1++;

return
NULL;

else
return
(char*)s1;

3.
GCC-4.8.0
char
*strstr(const
char*s1,const
char*s2)

const
char*p=s1;
const
size_tlen=strlen(s2);
for(;(p=strchr(p,*s2))!=0;p++)

if(strncmp(p,s2,len)==0)
return
(char*)p;

return(0);

应用举例
//
strstr.c
#include
<syslib.h>
#include
<string.h>
main()

char
*s="GoldenGlobalView";
char
*l="lob";
char
*p;
clrscr();
p=strstr(s,l);
if(p)
printf("%s",p);
else
printf("NotFound!");
getchar();
return0;

//功能:从字串”
string1
onexxx
string2
oneyyy”中寻找”yyy”
(假设xxx和yyy都是一个未知的字串)
char
*s=”string1onexxxstring2oneyyy”;
char
*p;
p=strstr(s,”yyy”);
if(p!=NULL)
printf(“%s”,p);
else
printf("notfound\n");
说明:如果直接写语句p=strstr(s,”one”),找到的是onexxxstring2oneyyy
char
*mystrstr(char*s1,char*s2)

if(*s1==0)

if(*s2)
return
(char*)NULL;
return
(char*)s1;

while(*s1)

int
i=0;
while(1)

if(s2[i]==0)
return
s1;
if(s2[i]!=s1[i])
break;
i++;

s1++;

return
(char*)NULL;
参考技术B #include <stdio.h>
int strrindex(char a[],char b[])

int i,j,k=-1;
for(i=0;a[i]!='\0';i++)
int n=0;
for(j=0;b[j]!='\0';j++)

if(a[i]!=b[j]) break;
i++;
n++;

if(b[j]=='\0') k=i-n;

return k;


int main()

char s[200],t[200];
gets(s);
gets(t);
printf( "%d\n",strrindex(s,t));

C语言 | 文件位置标记

C语言文件位置标记

随机访问不是按数据在文件中的物理位置次序进行读写,而是可以对任何位置上的数据进行访问。

为了对读写进行控制,系统为每个文件设置了一个文件读写位置标记(简称文件位置标记或文件标记),用来指示“接下来要读写的下一个字符的位置”。

一般情况下,在对字符文件进行顺序读写时,文件位置标记指向文件开头,这时如果对文件进行读的操作,就读第1个字符,然后文件位置标记向后移一个位置,在下一次执行读的操作时,就将位置标记所指向的第2个字符读入。

如果是顺序写文件,则每写完一个数据后,文件位置标记顺序向后移一个位置,然后在下一次执行写操作时把数据写入指针所指的位置。

对流式文件既可以进行顺序读写,也可以进行随机读写。关键在于控制文件的位置标记。

C语言文件定位

可以强制使文件位置标记指向人们指定的位置。

用rewind函数使文件位置标记指向文件开头。
rewind函数的作用是使文件位置标记重新返回文件的开头,此函数没有返回值。

用fseek函数改变文件位置标记

调用形式:fseek(文件类型指针,位移量,起始点)

起始点用0、1或2代替,0代表文件开始位置,1为当前位置,2为文件末尾位置。位移量指以起始点为基点,向前移动的字节数。位移量应是long型数据。

用ftell函数测定文件位置标记的当前位置

ftell函数的作用是得到流式文件中文件位置标记的当前位置。

以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~

100道C语言源码案例请去公众号:C语言入门到精通

以上是关于c语言如何对字符串进行位置查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用查询字符串查询进行地理位置搜索

C语言 | 文件位置标记

C语言图书管理系统

C语言编程中逗号是如何输出的!!

C语言在数组中快速找到指定的数的位置

c语言修改文件图标