C/C++语言 计算字符串中子字符串出现的次数

来源:百度知道 编辑:UC知道 时间:2024/06/04 03:56:13
任意输入2个字符串,求计算第二个字符串在第一个字符串中出现的次数。
用c++写了程序,但是计算结果不对。求教!

int main(void)
{
char str1[20],str2[20],*p1,*p2;

int sum=0;

cout<<"intput two strings"<<endl;

cin>>str1;
cin>>str2;

p1=str1;
p2=str2;

while (*p1!='\0')
{
if(*p1==*p2)

{ while((*p1=*p2)&&(*p2!='\0'))
{
p1++;
p2++;
}
}

else
p1++;
if(*p2=='\0')
sum=sum+1;

p2=str2;

}

cout<<sum;
return 0;

}

1.可通过 strstr 函数,查找子字符串。找到后即非空,然后加上子字符串偏移,再进行查找没,直到最后返回为空。

2.char *strstr( const char *str1, const char *str2 );

功能:函数返回一个指针,它指向字符串str2
首次出现于字符串str1中的位置,如果没有找到,返回NULL。

#include <stdio.h>
#include <string.h>

// 从str1中查找str2的个数,并返回
int findChildCnt(char* str1, char* str2)
{
    int len = strlen(str2);
    int cnt = 0;
    while (str1 = strstr(str1, str2)) // 如果查找到,则执行循环,否则为空退出循环
    {
        cnt++; // 统计次数
        str1 += len; // 加上偏移量,即移除str2
    }
    return cnt;
}

int main()
{