在字符串中计算某个子串出现的次数问题

题目描述

《铃儿响叮当》是一首曲调流畅、情绪欢快的美国歌曲。生动的歌词描绘了一群孩子冒着大风雪,坐在马拉的雪橇上,他们的欢声笑语伴着清脆的马铃声回响在原野……表现了孩子们热情奔放的性格,抒发了热爱美好生活的真挚情感。

在整首歌词中,jingle出现多次,请编写程序,统计给定一段的jingle的数量(不分大小写)。

输入

输入为多行数据,代表歌词的一段

输出

输出该段歌词中jingle的数量

样例输入
OH Jingle bells jingle bells
Jingle all the way
Oh what fun it is to ride
In a one-horse open sleigh
Jingle bells jingle bells
Jingle all the way
Oh what fun it is to ride
In a one-horse open sleigh

样例输出
6

思路一:利用scanf函数不能读入空格的特性,将此题转化成对单词进行逐个浏览,计算符合题意的单词数即为答案。
#include<stdio.h>
#include<string.h>
int main()
{
char s[1000],s1[10]=“jingle”,s2[10]=“Jingle”;
int num=0;
while(scanf("%s",s)!=EOF)
{
if(strcmp(s,s1)==0||strcmp(s,s2)==0)
{
num++;
}
}
printf("%d",num);
}
思路二;利用strstr函数寻找jingle/Jingle是否是原字符串的子串,是的话返回在原字符串的地址,并从此地址的下边继续寻找还是不是子串,是的话继续寻找并且计数,直到寻找结果为空指针即不是子串时为止。注意不分大小写,要分两种情况讨论,对于每次更新查找范围时,注意查找的首地址。 特别注意:gets函数读入字符串时,每次只能读入一行代码,如果要同时读入多行字符串,可以利用返回值为NULL 控制。即利用while(gets(s)!=NULL),对多行字符串进行处理。
#include<stdio.h>
#include<string.h>
int main()
{
char *p,*q;
int x=0,y=0,sum;
char s[1000],s1[10]=“jingle”,s2[10]=“Jingle”;
while(gets(s)!=NULL)
{
p=&s[0];
while(strstr(p,s1)!=NULL)
{
x++;
p=s[0]+strstr(p,s1)+6;
}
q=&s[0];
while(strstr(q,s2)!=NULL)
{
y++;
q=s[0]+strstr(q,s2)+6;
}
}
sum=x+y;
printf("%d",sum);
}

猜你喜欢

转载自blog.csdn.net/weixin_44373494/article/details/90174753