#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 a=strlen(str),b=strlen(substr); int n=0, i=0; while (i<=a-b) { bool flag=true; for (int j=0; j<b;j++) { if (str[i+j]!=substr[j]) { flag=false; } if(flag) { i+=b; n++; } else { i++; } } return n; } /********** End **********/这段代码怎么修改
时间: 2024-01-17 15:20:02 浏览: 100
使用include <iostream>时一定要加using namespace std
这段代码有几个问题,需要进行修改:
1. 在函数frequency中,for循环的结束位置不正确,应该将return n;放在for循环外面,否则会造成函数无法正常返回。
2. 在for循环中,当flag为false时,i的值只增加了1,应该改为i+=1,否则会导致程序陷入死循环。
下面是修改后的代码:
```
#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) {
int a=strlen(str),b=strlen(substr);
int n=0, i=0;
while (i<=a-b) {
bool flag=true;
for (int j=0; j<b;j++) {
if (str[i+j]!=substr[j]) {
flag=false;
}
}
if(flag) {
i+=b;
n++;
}
else {
i+=1;
}
}
return n;
}
```
阅读全文