2016-08-11 294 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'; 
}