我犯了一个愚蠢的错误,但没能找到它。在第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;
}发布于 2016-02-20 19:59:13
您最终会在ocurs()中形成一个没完没了的循环,因为当cad.find()找到所查找的子字符串时,您会用它返回的相同的索引填充它,并且它一直在查找相同的子字符串。您需要修复ocurs()例程,例如通过添加
if (i != string::npos) ++i;在find语句之后。
更广泛的答案是,您应该学会使用调试器--或者至少在可能有用的地方使用更多的cout语句。
https://stackoverflow.com/questions/35527848
复制相似问题