C ++ - 检查字符串是否为空

时间:2016-08-11 16:20:46

标签: c++ string

我真的很难得到这个。如果我的输入 为空,我的意思是“输入按钮”(意味着空字符串,空白),怎么能我使用 C ++ 检测到它?

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

int main()
{    
    string a;
    cin>>a;

    if(a.empty())
        cout<<"I";
    else
        cout<<"V";

    return 0;    
}

如果是空字符串,我该如何打印“我”?它是如何工作的? 提前谢谢。

3 个答案:

答案 0 :(得分:4)

如果我理解正确的话:

  1. 如果您想检查,如果提供的字符串为空,请使用getline()功能。它检查字符串是否为空,空或空格。

  2. 如果您想接受空输入,只需使用std::string inputValue; std::getline (std::cin,name); cout << name; 功能。

    getline()

    默认情况下,功能if (getIntent().getExtras() != null) { for (String key : getIntent().getExtras().keySet()) { String value = getIntent().getExtras().getString(key); Log.d(TAG, "Key: " + key + " Value: " + value); } } 接受输入。

答案 1 :(得分:1)

如果您希望接受空输入,则必须告诉输入流不要使用noskipws IO操纵器跳过空格:

cin >> noskipws >> a;

您的代码应该按照您的意愿运行。

答案 2 :(得分:1)

格式化的输入函数,即operator>>(),通常从跳过空格开始。 std::string的输入运算符肯定会这样做。这可能不是你想要的。

您可以使用操纵器std::noskipws禁用此行为,例如,使用

if (std::cin >> std::noskipws >> a) {
     std::cout << (a.empty()? "a is empty": "a is non-empty") << '\n';
}

但是,空格将留在流中。你可能想要ignore()它。从它的声音来看,你真的想要阅读一行输入并做一些特殊的事情,如果它只包含空格:

if (std::getline(std::cin, a)) {
    std::cout << (std::any_of(a.begin(), a.end(),
                              [](unsigned char c){ return !std::isspace(c); })
                  ? "a contains non-space characters"
                  : "a contains only spaces") << '\n';
}