1. strstr函数概述
strstr函数是c语言中的一个非常实用的字符串操作函数,在字符串中查找某个子串第一次出现的位置,返回指向该子串的指针。该函数位于string.h头文件中,字符串操作基础库。
#include <string.h>
char *strstr(const char *haystack, const char *needle);
其中,haystack表示要查找的字符串,needle表示要查找的子串。
2. strstr函数的用法
2.1 查找子串
可以通过调用strstr函数来查找haystack中第一次出现needle的位置,例如查找"sit"在字符串"this is a sit"中第一次出现的位置:
#include <stdio.h>
#include <string.h>
int main(){
char str1[]="this is a sit";
char str2[]="sit";
char *p;
p=strstr(str1,str2);
if(p)
printf("the substring is:%s\n",p);
else
printf("the substring is not found\n");
return 0;
}
上面的代码中,首先定义了一个字符串str1和一个子串str2,然后通过调用strstr函数查找子串str2在str1中的位置,最后输出结果。
如果找到了子串,那么返回值就是指向子串第一次出现位置的指针(即p指向子串"sit"的开头),如果找不到则返回NULL。
2.2 精准匹配
由于strstr函数是在字符中查找字串,在haystack中序列搜索等于needle的第一出现,因此可以通过该函数实现精确匹配,例如:
char *strstr (const char *haystack, const char *needle)
lengthOfString = strlen(needle); // 待搜索字符串长度
for (i = 0; i <= strlen(haystack) - lengthOfString; ++i) {
if (haystack[i] == needle[0]) { // 匹配首字母
if (strncmp(&haystack[i], needle, lengthOfString) == 0) // 判断后面的字符是否相等
return (char *)&haystack[i];
}
}
return NULL;
}
通过比对判断两个字符串是否相等,获得准确的匹配结果。
2.3 查找多个子串
我们也可以使用strstr函数查找字符串中的多个子串,例如在字符串"this is a sit"中查找"i"和"s"所在的位置:
#include <stdio.h>
#include <string.h>
int main(){
char str1[]="this is a sit";
char *p;
p=strstr(str1,"i");
while(p){
printf("i found at:%d\n",p-str1+1);//输出i所在的位置,即指针地址减去原始字符串的地址再加一
p=strstr(p+1,"i");//p+1指向i下一个字符的位置,继续查找
}
p=strstr(str1,"s");
while(p){
printf("s found at:%d\n",p-str1+1);
p=strstr(p+1,"s");
}
return 0;
}
上面的代码中,定义了一个字符串str1,然后分别查找子串"i"和"s"所在的位置,如果查找到了就输出其位置,并继续在剩下的字符串中查找,直到所有的位置都被找到。
需要注意的是,如果要在同一个字符串中查找多个子串,可以在查找完一个子串后将p指针向后移一个字符的位置,以继续查找下一个子串。
3. 总结
strstr函数是c语言中非常常用的字符串操作函数之一,可以快速地查找一个字符串中是否包含某个子串,还可以实现字符串的精准匹配和查找多个子串的功能,具有非常广泛的应用场景。掌握使用strstr函数的技巧可以使程序更加高效、优雅,提升我们的编程水平。