2016-02-20 39 views
0

我有一个愚蠢的错误,但管理没有找到它。第17行我尝试读取两个整数和一个字符串,但是当我输入(或类似):使用cin读取字符串时出错

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

我没有看到任何要求输入数据,除第17行外没有任何循环。 – user4581301

+0

听起来像你需要运行一个调试器。 – mindriot

回答

0

你在里面ocurs()无限循环结束了,因为当cad.find()发现力求子,你用它返回相同的指数喂养它,它会持续寻找同样的字符串。你需要通过find语句后加入

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

解决您的日常ocurs(),例如。

更广泛的答案是,你应该学会使用去bugger - 或者至少在他们可能有用的地方使用更多的语句。

+0

谢谢,那是问题所在。 – manduinca

+0

然后,欢迎您接受答案。 – mindriot

相关问题