2016-08-11 293 views
0

我真的很难得到这个。如果我的输入,我的意思是“回车键”(指空字符串,空格),我怎么可以检测到它使用C++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;  
} 

如何打印“我”如果它是一个空字符串,它是如何工作的?
在此先感谢。

+0

如果输入的代码成功原样,'了'不会是空的。但是,输入可能会失败。不过,您应该始终验证输入是否成功。 –

+0

如果'a''''really'_ empty(例如'''''''''''''''''''''',a.empty()''返回'true',没有其他什么,没有空格或任何东西)。 – ForceBru

+2

我有点怀疑XY问题。检查“a”是否为“空”不是查看它是否被读取的正确方法。你应该验证* stream *状态;不是字符串状态。 'if(std :: cin >> a)...'或者你试图从'std :: cin'中取出一行*并确定它是否在空白之后是空的?这种情况稍微复杂一些。 – WhozCraig

回答

1

如果你想要一个空的输入被接受,你必须告诉输入流不跳过空白使用noskipws IO操纵:

cin >> noskipws >> a; 

那么你的代码应该工作,你想让它。

4

如果我理解正确的你:

  1. 如果你想检查如果提供的字符串,只需使用isspace()功能。它检查字符串是否为空,空或空白。

  2. 如果要接受空输入,只需使用getline()函数。

    std::string inputValue; 
    std::getline (std::cin,name); 
    cout << name; 
    

    功能getline()接受由默认输入。

+1

谢谢你,我必须使用getline()函数。 @mateudu – inhaler

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'; 
}