在现在的微机硬件条件下(CPU性能足够快、内存足够大),C语言、以及C++语言的在一个字符串中查找另一个子串(strstr)的函数的效率快慢,早就已经可以忽略不计了。源代码无法获得它。因为C语言的各种库函数,归根到底都是已经转化为了机器可执行的汇编语言指令的。
c语言strstr(c语言strstr函数的用法)
所以现在已经完全没有必要再去花费很多时间和精力在修改C编译器提供的各种库函数的实现上面了。而是如果真的对软件开发感兴趣、并立志作研发工作的话,那么学习计算机数据结构(堆栈、链表、树)、以及计算机算法(各种排序算法、以及各种搜索算法)、和各种数学模型的建立才是最最重要的,把它们真的学习精通、并掌握了,远比研究能够节省多少个字节的汇编语言指令要重要得多。
库函数的效率肯定比你自己写高效。
源码没读过,找子串有个优秀的算法叫KMP算法。
下面是有人写的比较。
一般情况下,strstr的表现是要比KMP优秀。你可以百度下strstr和kmp。
请问c语言寻找子串位置strstr(a,b)-a+1为什么要-a?
假设a存放"1234567",b存放"456"
strstr(a,b)返回的是指向4的地址,要想求出这个地址是a数组第几个地址,就需要减去数组起始地址,因此strstr(a,b)-a就是完成这个功能的.
因为查找函数返回的是一串在a串中的起始地址。再减去a的首地址就得到了起始字符的下标。因为这个下标是从零开始的,所以按照习惯再加1,就是要查找的字符串b出现在a串中的第几个字符了。
“位置”是从a起算的,就是说a那个位置是第一个;而strstr返回的是绝对地址,当然就得减去a。
1、新建php文件。
2、声明两个变量。
3、截取变量c后面的所有内容。
4、预览效果如图所示。
5、再加一个c。
6、可以看出截取的是第一个c后面所有字符,附上源码,
';。
函数原型是char *strstr(char *str1,char *str2);作用是找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
如果找到返回该位置的指针。若找不到,返回NULL指针。如果不用库函数写,就得用到串操作中的模式匹配算法,或者他的改进算法!!!
这里给你一个模式匹配算法不明白的,可以交流下!!
#include
#include
int main()
{char a[10];
char b[5];
int i,j,m,n,k;
printf("输入字符串a:");
scanf("%s",a);
printf("输入字符串b:");
scanf("%s",b);
i=k=0;
j=0;
while(i {if(a[i]==b[j]) {i++; j++; }else {j=0;k++; i=k;//可用于记录原来i的位置 ; }} if(j>=strlen(b))//判断找到字符串的条件 {printf("找到字符串%s",b); return 1; }else {printf("未找到字符串%s\n",b); return 0; }} c编程高手团队正在招新,有意者速速行动,一起学习,一起努力!! srcstr1[200] = 0x52;//R srcstr1[201] = 0x45;//E srcstr1[202] = 0x41;//A srcstr1[203] = 0x44;//D srcstr1[204] = 0x59;//Y 以上不是胡写吗?若在srcstr1[0]~srcstr1[199]中有一个0,那不就找不到了吗? 在C语言中 strchr 和 strstr函数都被包含在 strchr函数原型:char * strchr(char * str, int ch); 功能就是找出在字符串str中第一次出项字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是 null)。 strstr 函数原型: char * strstr(char * str1,char * str2);功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)。 它们一个是求一个字符在字符串中得位置,另一个是求一个字符串在另一个字符串中的位置。 这些在C语言书最后面中都有的,你要学会去多看看书,要会自己解决问题。学编程是要有耐心的,学久了就会懂了。 strstr(strcat(str1, str2), str3);用于将str2连接到str1后面,构成新的字符串,然后在新字符串中查找包含str3的位置, 同时将该位置以后的字符串整个返回。 strcat(str1, str2)是将str2连接到str1末尾,由于strcat没有做字符串长度检查,必须保证传入的str1的剩余空间能够容纳 下str2,比如: char str1[100] = "Hello"; char str2[] = world; 那么strcat(str1, str2)返回的结果是:Helloworld 但如果str1长度只有"Hello",则会出现不可预料的错误。 strstr(str1, str2)则会在str1中查找str2,同时返回剩下的字符串, 比如: char str1[] = "Hello"; char str2[] = "e"; 则strstr(str1, str2)返回结果为: ello 那不可能。strstr只能用在以'\0'结尾的字符型数组里查找一个字符串,如果字符型数组不以'\0'结束,则找不到字符串时就会出错,但不一定报错。这与数组是一维的或二维的无关。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。C语言strstr函数的应用注意事项?为什么找不到子数组,详见描述
C语言里用strstr函数,用一维数组会有错误,二维数组却没有,为什么?