为什么我总是在我的代码中得到“假”

时间:2017-08-04 16:11:55

标签: c++

我编写代码来检查输入,我总是设置HavePunct标志false。但是,当我输入hello,world!!时,它会向我返回错误的结果。如果您发现我的代码有任何问题,请告诉我们:

#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main() {
    string s,result_s;
    char ch;
    bool HavePunct = false;
    int sLen = s.size();

    cout << "Enter a string:" << endl;
    getline(cin, s);
        //检测字符串是否有符号
    for (string::size_type i = 0;i != sLen; ++i) {
        ch = s[i];
        if (ispunct(ch)) {
            HavePunct = true;
        }   
        else
            result_s += ch;
    }
    if (HavePunct) {
        cout << "Result:" << result_s;
    }
    else {
        cerr << "No punction in enter string!" << endl;
        system("pause");
        return -1;
    }
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您在输入任何输入之前计算线条的长度。因此,sLen始终为零。移动该行,使其位于您读取输入的行之后。

cout << "Enter a string:" << endl;
getline(cin, s);
int sLen = s.size();

答案 1 :(得分:2)

我无法确定,但是看起来因为你的迭代器的上限是由变量sLen确定的,你在收到字符串之前将其赋值为s.size(),因此有效地使你的上限0并导致你的for循环永远不会执行。

试试这个让我知道:

getline(cin, s);
int sLen = s.size();
for (string::size_type i = 0;i != sLen; ++i) {
ch = s[i];
if (ispunct(ch)) {
   HavePunct = true;
   }   
else
   result_s += ch;
}