使用 cin 读取字符串时出错
Error reading string with cin
我有一个愚蠢的错误,但没找到。在第 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;
}
你最终陷入 ocurs()
的无限循环,因为当 cad.find()
找到要查找的子字符串时,你用与 returns 相同的索引输入它,并且它一直在寻找相同的子串。您需要修复 ocurs()
例程,例如添加
if (i != string::npos) ++i;
在 find
语句之后。
更广泛的答案是您应该学习使用调试器——或者至少,在可能有用的地方使用更多 cout
语句。
我有一个愚蠢的错误,但没找到。在第 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;
}
你最终陷入 ocurs()
的无限循环,因为当 cad.find()
找到要查找的子字符串时,你用与 returns 相同的索引输入它,并且它一直在寻找相同的子串。您需要修复 ocurs()
例程,例如添加
if (i != string::npos) ++i;
在 find
语句之后。
更广泛的答案是您应该学习使用调试器——或者至少,在可能有用的地方使用更多 cout
语句。