1、strstr是C语言中的函数,作用是返回字符串中首次出现子串的地址。
extern
char
*
strstr
(
char
*str1,
const
char
*str2);
str1: 被查找目标 string expression to search.
str2: 要查找对象 The string expression to find.
返回值:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
2、代码如下:查找子字符串“abcd”在字符串中的个数并打印结果。
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int getstrCount(char* str1, char* str2, int* nCount)
{
int ret = 0;
int ncount = 0;
char* p1 = str1;
char* p2 = str2;
if (str1 == NULL || str2 == NULL)
{
ret = -1;
printf("func error:%d\n", ret);
return ret;
}
do
{
p1 = strstr(p1, p2);
if (p1 != NULL)
{
ncount++;
p1 = p1 + strlen(str2);
}
else
{
break;
}
} while (*p1 != '\0');
*nCount = ncount;
return ret;
}
int main()
{
int ret = 0;
int nCount = 0;
char src[] = "1abcd2abcd3abcd4abcd0zds5abcd";
char obj[] = "abcd";
ret = getstrCount(src, obj, &nCount);
if (ret != 0)
{
printf("func ret error\n");
}
printf("nCount=%d\n",nCount);
system("pause");
return 0;
}
3、运行结果如下:
4、strstr-while模型
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int getStrCountnum(char* str1, char* str2, int* ncount)
{
int ret = 0;
int nCount = 0;
char* p1 = str1;
char* p2 = str2;
if (str1 == NULL || str2 == NULL)
{
ret = -1;
printf("func error:%d\n", ret);
return ret;
}
while (p1 = strstr(p1, p2))
{
p1 = p1 + strlen(p2);
nCount++;
}
*ncount = nCount;
return ret;
}
int main()
{
int ret = 0;
int ncount = 0;
char buf[] = "1abcd2abcd3abcd4abcdyurte5abcd";
char obj[] = "abcd";
ret = getStrCountnum(buf, obj, &ncount);
if (ret != 0)
{
printf("func error \n");
}
printf("ncount=%d\n", ncount);
system("pause");
return 0;
}