我有一个愚蠢的错误,但是没有找到它。在第17行,我尝试读取两个整数和一个字符串,但是当我输入(或类似)时:
2 3 (
我一直被问到参赛作品。当我输入(或类似)时:
2 3 F
顺利读取。可能是" ("一个特殊的角色?
#include <iostream>
using namespace std;
int ocurs(string cad, string subcad) {
int con = -1;
size_t i = 0;
while(i != string::npos) {
i = cad.find(subcad, i);
con++;
}
return con;
}
int main() {
int n, m, con = 0;
string cad, subcad;
cin >> n >> m >> subcad;
//cout << subcad;
for(int i = 0; i < n / 2; i++)
cad.push_back('(');
for(int i = 0; i < n / 2; i++)
cad.push_back(')');
//cout << cad;
con += ocurs(cad, subcad);
cad.clear();
for(int i = 0; i < n; i++)
if(i % 2 == 0) cad.push_back('(');
else cad.push_back(')');
con += ocurs(cad, subcad);
cout << con;
return 0;
}
答案 0 :(得分:0)
你最终进入ocurs()
内的无限循环,因为当cad.find()
找到所寻找的子字符串时,你用它返回的相同索引来提供它,并且它会不断找到相同的子字符串。您需要修复ocurs()
例程,例如添加
if (i != string::npos) ++i;
在find
声明之后。
更广泛的答案是,您应该学习使用调试器 - 或者至少使用一些可能有用的cout
语句。