用cin读取字符串时出错

时间:2016-02-20 19:17:30

标签: c++ iostream 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;
}

1 个答案:

答案 0 :(得分:0)

你最终进入ocurs()内的无限循环,因为当cad.find()找到所寻找的子字符串时,你用它返回的相同索引来提供它,并且它会不断找到相同的子字符串。您需要修复ocurs()例程,例如添加

if (i != string::npos) ++i;

find声明之后。

更广泛的答案是,您应该学习使用调试器 - 或者至少使用一些可能有用的cout语句。