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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++语言 计算字符串中子字符串出现的次数相关的知识,希望对你有一定的参考价值。

参考技术A 分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

任意输入2个字符串,求计算第二个字符串在第一个字符串中出现的次数。

用c++写了程序,但是计算结果不对。求教!

int main(void)



char str1[20],str2[20],*p1,*p2;

int sum=0;

cout<<"intput o 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;



解析:

#include <iostream>

#include <math.h>

using namespace std;

int main()



char str1[20],str2[20],*p1,*p2;

int sum=0;

cout<<"intput o strings"<<endl;

cin>>str1;

cin>>str2;

p1=str1;

p2=str2;

while (*p1!='\0')



if(*p1==*p2)

while((*p1==*p2)&&(*p2!='\0')&&(*p1!='\0'))

while((*p1==*p2)&&(*p2!='\0')) 有问题



p1++; 这里有问题

p2++;





else p1++;

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

p2=str2;



cout<<sum;

return 0;



-----

例如:输入 ababababab ab

while (*p1!='\0'), if(*p1==*p2),判断都为真,进入 while((*p1==*p2)&&(*p2!='\0')) 循环,对比字串2的每一个字符,并将p1指针后移,当有不相等的字符退出循环,这时再进入这个循环时问题来了,P1的指针被后移了,确没有恢复。只把P2进行了恢复,也许作者认为不必要,但就是这不必要导致了程序出错,while((*p1==*p2)&&(*p2!='\0'))也没有对P1进行判断是否还能继续。

在输入字符串时也要注意,不能大于20个字符。否则要改数组大小。

--------------

修改后:

#include <iostream>

#include <math.h>

using namespace std;

int main()



char str1[255],str2[255],*p1,*p2, *temp;

int sum=0;

cout<<"intput o strings"<<endl;

cin>>str1;

cin>>str2;

p1=str1;

p2=str2;

while (*p1!='\0')



temp = p1;

if(*temp==*p2)



while((*temp==*p2)&&(*p2!='\0')&&(*temp!='\0'))



temp++;

p2++;





p1++;

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

p2=str2;



cout<<sum;

return 0;

C语言 计算字符串中子串出现的次数 求更改

代码如下,可以运行,但结果不对,求更改.
#include"stdio.h"
#include"string.h"
int subString(char a[],char b[])

int sum=0,*pc,l;
pc=a;
l=strlen(b);
while(pc!=NULL)

pc=strstr(pc,b);
if(pc!=NULL)

sum++;
pc=pc+l;


return sum;

main()

char str1[100],str2[10];
int sum;
gets(str1);
gets(str2);
sum=subString(str1,str2);
printf("%d",sum);
return 0;

参考技术A 子函数subString(char a[],char b[])中的*pc定义成char类型即可 参考技术B #include"stdio.h"
#include"string.h"
int subString(char a[],char b[])

    int sum=0,l;
    char *pc;  //指针类型为字符型
pc=a;
    l=strlen(b);
    while(pc!=NULL)
    
        pc=strstr(pc,b);
        if(pc!=NULL)
        
            sum++;
            pc=pc+l;
        
    
    return sum;

main()

    char str1[100],str2[10];
    int sum;
    gets(str1);
    gets(str2);
    sum=subString(str1,str2);
    printf("%d",sum);
    return 0;

本回答被提问者采纳

以上是关于C/C++语言 计算字符串中子字符串出现的次数的主要内容,如果未能解决你的问题,请参考以下文章

C语言课程设计题目计算字符串中子串出现的次数

C语言试题159之计算字符串中子串出现的次数

急求。。。C语言实现,计算字符串中子串出现的次数,就是先输入一个字符串,再输入一个上面字符串中存在

急求。。。C语言实现,计算字符串中子串出现的次数,比如输入GACTC,要求输出GA,AC,CT,TC出现的次数

C语言问题计算字符串中子串出现的次数。要求:用一个子函数subString()实现,参数为指向字符串

c_cpp 使用后缀数组计算给定文本中子字符串的出现次数