在C语言中,字符串是一种常用的数据结构。常常需要对字符串进行操作,其中一个常用的操作就是查找子字符串。C语言中提供了一个函数——strstr函数——专门用于查找子字符串。本文将详细介绍这个函数的应用与用法,并提供一些示例代码,以便读者更好地理解这个函数的使用方法。
一、strstr函数概述
strstr函数是C语言中一个查找子字符串的函数,它的功能是在一个字符串中查找另一个指定的字符串。该函数的原型如下:
char* strstr(const char* str1, const char* str2);
其中str1为要查找的字符串,str2为要查找的子字符串。
函数的返回值是一个指向字符串中第一个匹配子字符串的指针,如果没有找到匹配,则返回NULL。
二、strstr函数的用法
下面介绍strstr函数的使用方法。
1. 在字符串中查找子字符串
使用strstr函数在一个字符串中查找子字符串的方法如下所示:
char* p;
char str1[]="abcdefg";
char str2[]="cde";
p=strstr(str1,str2);
if(p) printf("the result is %s",p);
其中,str1是要查找的字符串,str2是要查找的子字符串。函数会查找str1中是否包含str2,如果找到匹配,则返回指向字符串中第一个匹配子字符串的指针,否则返回NULL。
2. 长度为0的子字符串
如果子字符串长度为0,则函数会直接返回指向字符串的指针。例如:
char* p;
char str1[]="abcdefg";
char str2[]="";
p=strstr(str1,str2);
if(p) printf("the result is %s",p);
函数会直接返回指向str1的指针,因为str2的长度为0,即是空字符串。
3. 仅仅查找字符串的前几个字符
通过指定要查找的子字符串的前几个字符,可以查找字符串的一部分。例如:
char* p;
char str1[]="abcdefg";
char str2[]="ab";
p=strstr(str1,str2);
if(p) printf("the result is %s",p);
这个例子中,函数会查找字符串str1是否包含子字符串“ab”,如果找到,则返回指向字符串中第一个匹配子字符串的指针。
4. 多次查找
如果要查找字符串中的所有匹配,需要多次调用函数。例如:
char str1[]="abcdefgabcxyzabc";
char str2[]="abc";
char* p=strstr(str1,str2);
while(p){
printf("the result is %s",p);
p=strstr(p+1,str2);
}
程序会循环查找字符串str1中匹配子字符串“abc”的所有位置,并返回指向字符串中第一个匹配子字符串的指针。
5. 查找不在字符串开头的子字符串
如果要查找不在字符串开头的子字符串,可以先使用strchr函数找到子字符串的第一个字符,再使用strstr函数查找子字符串。例如:
char str1[]="abcdefgabcxyzabc";
char str2[]="abc";
char* p=strstr(strchr(str1,'b'),str2);
if(p) printf("the result is %s",p);
strstr函数会从“b”开始查找匹配的子字符串。
三、strstr函数的应用
strstr函数在实际编程中有很多应用场景,下面就介绍其中的一些。
1. 判断一个字符串中是否包含某个子字符串
strstr函数可以帮助我们判断一个字符串中是否包含某个子字符串,如果包含,则返回指向字符串中第一个匹配子字符串的指针。例如:
char str1[]="abcdefgabcxyzabc";
char str2[]="abc";
char* p=strstr(str1,str2);
if(p) printf("The substring is found at position %ld.",p-str1+1);
else printf("The substring is not found.");
输出结果为“The substring is found at position 1.”。
2. 查找字符串中的数字
如果一个字符串中包括数字,可以使用strstr函数和sscanf函数来查找这些数字。例如:
char str[]="This string contains 1234 and 5678";
char* p=strstr(str,"12");
if(p){
int num;
sscanf(p,"%d",&num);
printf("The number is %d",num);
}
函数会查找字符串str中是否包含“12”,如果包含,则使用sscanf函数从该位置开始读取数字,并输出结果为“The number is 1234”。
3. 查找指定格式的字符串
如果要从多个字符串中查找指定格式的子字符串,可以使用strstr函数和正则表达式。例如:
char* str[]={"This string contains 1234",
"Another string contains 5678",
"Yet another string contains 91011"};
char* pattern="[0-9]+";
for(int i=0;i<3;i++){
char* p=strstr(str[i],pattern);
if(p) printf("The pattern is found in string %d, position %ld.\n",i+1,p-str[i]+1);
}
函数会循环查找字符串数组中是否包含“[0-9]+”格式的子字符串,如果包含,则输出结果为“The pattern is found in string 1/2/3, position n.”。
四、示例代码
下面是一些使用strstr函数的示例代码。
1. 判断两个字符串是否互为子串
bool hasSubstr(char* str1,char* str2){
return strstr(str1,str2)!=NULL||strstr(str2,str1)!=NULL;
}
2. 已知字符串中包含多少个子字符串
int getSubstrCount(char* str,char* substr){
int count=0;
char* p=strstr(str,substr);
while(p){
count++;
p=strstr(p+1,substr);
}
return count;
}
3. 将字符串中的所有子字符串替换为指定的内容
void replaceSubstr(char* str,char* oldSubstr,char* newSubstr){
int lenOld=strlen(oldSubstr),lenNew=strlen(newSubstr);
char* p=strstr(str,oldSubstr);
while(p!=NULL){
memmove(p+lenNew,p+lenOld,strlen(p+lenOld)+1);
memcpy(p,newSubstr,lenNew);
p=strstr(p+lenNew,oldSubstr);
}
}
五、总结
strstr函数是C语言中常用的字符串操作函数之一,可以帮助开发者查找字符串中指定的子字符串。本文介绍了strstr函数的概述、使用方法以及应用场景,并提供了一些示例代码。希望读者通过本文的介绍,能够更好地掌握这个函数的使用方法,提高自己的编程技能。