检测输入字符串是否有空格

时间:2019-06-11 18:02:48

标签: c++

我写了这段代码来检测输入字符串是否有空格。请说明这种方法有什么问题。

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

int main(){
    string inp;
    getline(cin, inp);


    for (int i = 0; i < inp.length(); i++) {
        string z = to_string(inp[i]);
        if (z == " ") {
            cout << "space";
        }
        else {
            i++;
        }
    }
}

如果我输入带空格的字符串,则不会打印“空格”。

2 个答案:

答案 0 :(得分:6)

由于inpstd::string,所以inp[i]将是char。由于std::to_string仅对算术非字符值具有重载,因此在char上调用它类似于在所述char的整数表示上调用它。 (如果您登录z,则可能会找到一个打印的数字。)

相反,直接将inp[i]与一个空格进行比较。 else { i++; }也是不必要的-您可能会跳过空格。

for (int i = 0; i < inp.length(); i++) {
    if (inp[i] == ' ') {    // note single quotes for char
        cout << "space";
    }
}

答案 1 :(得分:0)

@TrebledJ的答案说明了为什么您的代码损坏以及如何对其进行修复。

处理这种情况的另一种方法是改用std::string::find()

#include <iostream>
#include <string>

int main(){
    std::string inp;
    std::getline(std::cin, inp);

    if (inp.find(' ') != std::string::npos) {
        std::cout << "space";
    }
}

或者,您的原始代码尝试为找到的每个空格字符输出"space"。您可以在循环中使用find()

#include <iostream>
#include <string>

int main(){
    std::string inp;
    std::getline(std::cin, inp);

    std::string::size_type idx = inp.find(' ');
    while (idx != std::string::npos) {
        std::cout << "space at " << idx << std::endl;
        idx = inp.find(' ', idx+1);
    }
}