#include <stdlib.h> #include <stdio.h> #include <string.h> int main() { int ncount = 0; //初始化找到相同子串的次数为0 char *str1 = "khjlg666asgfsds6a666dsgdsgs666gdfgdgs666ggfdsbbn"; char str2[] = "666"; do { str1 = strstr(str1, str2); //调用strstr函数,若找到返回初次找到str2处的地址 //如果str1 = "aaa12ssasa",str2 = "12",调用str1 = strstr(str1, str2)后str1 = "12ssasa" printf("此时str1为:%s\n",str1); //输出调用strstr()后的str1 if(str1 != NULL) //如果str1不为空,即在str1中找到与str2相同的子串 { ncount = ncount + 1; //次数+1 str1 = str1 + strlen(str2); //str1指针指向后边的字符串(跳过n个位置(其中,str2长度 = n)) } else { break; } }while (*str1 != '\0'); //指针未指向str1中的'\0'时,继续执行循环 printf("str2在str1中出现的次数为:%d\n", ncount); system("pause"); return 0; }程序执行结果如下:
此时str1为:666asgfsds6a666dsgdsgs666gdfgdgs666ggfdsbbn 此时str1为:666dsgdsgs666gdfgdgs666ggfdsbbn 此时str1为:666gdfgdgs666ggfdsbbn 此时str1为:666ggfdsbbn 此时str1为:(null) str2在str1中出现的次数为:4 请按任意键继续. . .
2、改写为while循环的程序如下所示:
#include <stdlib.h> #include <stdio.h> #include <string.h> int main() { int ncount = 0; //初始化找到相同子串的次数为0 char *str1 = "khjlg666asgfsds6a666dsgdsgs666gdfgdgs666ggfdsbbn"; char str2[] = "666"; while (str1 = strstr(str1, str2)) { ncount = ncount + 1; //次数+1 str1 = str1 + strlen(str2); //str1指针指向后边的字符串(跳过n个位置(其中,str2长度 = n)) if (*str1 == '\0') { break; } }; printf("str2在str1中出现的次数为:%d\n", ncount); system("pause"); return 0; }
程序执行结果为:
str2在str1中出现的次数为:4 请按任意键继续. . .