【问题标题】:Error reading string with cin用 cin 读取字符串时出错
【发布时间】:2016-02-20 19:17:29
【问题描述】:

我有一个愚蠢的错误,但设法找不到它。在第 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;
}

【问题讨论】:

  • 除了第 17 行之外,我没有看到任何要求输入数据的内容,并且没有围绕它的循环。
  • 听起来你需要运行一个调试器。

标签: c++ iostream cin


【解决方案1】:

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

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

find 语句之后。

更广泛的答案是,您应该学习使用调试器——或者,至少,在可能有用的地方使用更多cout 语句。

【讨论】:

  • 谢谢,这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
相关资源
最近更新 更多