首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cin读取字符串时出错

使用cin读取字符串时出错
EN

Stack Overflow用户
提问于 2016-02-20 19:17:29
回答 1查看 323关注 0票数 0

我犯了一个愚蠢的错误,但没能找到它。在第17行,我尝试读取两个整数和一个字符串,但是当我输入(或类似的)时:

代码语言:javascript
复制
2 3 (

我一直被问到参赛名单。当我输入(或类似的):

代码语言:javascript
复制
2 3 F

读得很流畅。会是“(”)一个特殊的角色吗?

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-20 19:59:13

您最终会在ocurs()中形成一个没完没了的循环,因为当cad.find()找到所查找的子字符串时,您会用它返回的相同的索引填充它,并且它一直在查找相同的子字符串。您需要修复ocurs()例程,例如通过添加

代码语言:javascript
复制
if (i != string::npos) ++i;

find语句之后。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35527848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档