1. 首页 > 科技 >

c语言strstr(c语言strstr函数的用法)

在现在的微机硬件条件下(CPU性能足够快、内存足够大),C语言、以及C++语言的在一个字符串中查找另一个子串(strstr)的函数的效率快慢,早就已经可以忽略不计了。源代码无法获得它。因为C语言的各种库函数,归根到底都是已经转化为了机器可执行的汇编语言指令的。

c语言strstr(c语言strstr函数的用法)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编程高手团队正在招新,有意者速速行动,一起学习,一起努力!!

C语言strstr函数的应用注意事项?为什么找不到子数组,详见描述

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函数都被包含在头文件中,也就是要调用它们时要在程序前面包含头文件,也就是写这个语句:#include

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

C语言里用strstr函数,用一维数组会有错误,二维数组却没有,为什么?

那不可能。strstr只能用在以'\0'结尾的字符型数组里查找一个字符串,如果字符型数组不以'\0'结束,则找不到字符串时就会出错,但不一定报错。这与数组是一维的或二维的无关。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 12345678@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息