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;
#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语言实现,计算字符串中子串出现的次数,比如输入GACTC,要求输出GA,AC,CT,TC出现的次数