任务描述
本关任务:计算一个字符串(子串)在另一个字符串(长串)中出现的次数。
相关知识
字符串操作函数
C 和 C++ 提供了一系列操作字符串的函数,要使用这些函数只要在代码的头文件部分包含 string.h 即可。
这里我们用到strstr函数和strlen函数
编程要求
计算一个字符串(子串)在另一个字符串(长串)中出现的次数。
提示
一个子串在另一个长串中出现的次数是指长串中可以同时截取出多少个子串。例如:子串 “aaa” 在 “aaaaaaa” 中出现的次数为 2 次。
测试说明
测试输入:
aaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
预期输出:
7
测试输入:
ab
aaaaabbbbbabcdefg
预期输出:
2
开始你的任务吧,祝你成功!
// 包含字符串函数库
#include <string.h>
#include <iostream>
using namespace std;
int frequency(char * substr, char * str);
int main()
{
char sub[128],str[1024];
cin.getline(sub,128); // 输入子串
cin.getline(str,1024); // 输入长串
int n = frequency(sub,str); // 调用frequency函数,计算子串在长串中出现的次数
cout<<n<<endl; // 输出次数
return 0;
}
// 函数frequency:计算子串在长串中出现的次数
// 参数:substr-指向子串,str-指向长串
// 返回值:出现的次数
int frequency(char * substr, char * str)
{
// 请在此添加代码,实现函数frequency
/********** Begin *********/
int n=0,s1=0,s2=0;
char *p=str;
s1=strlen(str);//长串长度
s2=strlen(substr);//子串长度
while(s1>=s2)
{//长串如果比子串短,就不用再找了,找不到的
str=strstr(str,substr);
if(str!=0){//不等于0,找到了
n++;
str+=s2;//长串从找到子串的位置开始后移一个子串的长度
}
else break;//找不到了,跳出循环
s1=strlen(str);
}
return n;
/********** End **********/
}