使用 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 语句。