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

"I"가 빈 문자열이고 어떻게 작동합니까?
미리 감사드립니다.

+0

입력과 함께 코드가 성공하면 'a'는 비어 있지 않습니다. 그러나 입력이 실패 할 수 있습니다. 그래도 입력이 성공적 이었는지 항상 확인해야합니다. –

+0

'a.empty()'는'a'가 빈 상태 (예 :'''')이면'true'를 반환합니다 (공백이나 기타 아무것도 쓰지 않습니다). – ForceBru

+2

나는 다소 XY 문제를 의심합니다. 'a'가 "비어있다"는 것을 검사하는 것은 그것이 전혀 읽혔는지 알 수있는 적절한 방법이 아닙니다. 당신은 * 스트림 * 상태를 검증해야합니다; 문자열 상태가 아닙니다. 'if (std :: cin >> a) ...'아니면'std :: cin'에서 * line *을 가져 와서 공백을 찢은 후에 비어 있는지 확인하려고했을 것입니다. 이 경우 좀 더 복잡합니다. – WhozCraig

답변

1

당신이 빈 입력이 접수 할 경우에 당신은 noskipws 입출력 조작을 사용하여 공백 건너 뛰지하기 위해 입력 스트림을 말해야 :

cin >> noskipws >> a; 

당신이 그것을 원하는대로 귀하의 코드는 다음 작업을해야 .

4

내가 제대로 이해 한 경우 :

당신이 원하는 경우
  1. 체크 에 제공되는 문자열이 경우, 단지 isspace() 기능을 사용하십시오. 문자열이 null인지, 비어 있는지 또는 공백인지 여부를 확인합니다.

  2. 빈 입력을 허용하려면 getline() 기능 만 사용하십시오.

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

    기능 getline()는 기본적으로 입력을 받아들입니다.

+1

감사합니다. getline() 함수를 사용해야합니다. @mateudu – inhaler

1

형식화 된 입력 함수, 즉 operator>>()은 일반적으로 공백을 건너 뛰기 시작합니다. std::string에 대한 입력 연산자가 확실히 그 것입니다. 이것은 아마도 당신이 원하는 것이 아닙니다.

당신은 그러나

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

사용하여, 예를 들어, 조작하는 std::noskipws를 사용하여이 동작을 비활성화 할 수 있습니다, 공백은 스트림에 남아있을 것입니다. 당신은 아마 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'; 
} 
관련 문제