2017-11-22 24 views
0

한 줄에 bool 배열에 올바른 방식으로 데이터를 입력 할 수 있습니까? 예를 들어bool 배열에 한 줄에 데이터 입력

#include <iostream> 

using namespace std; 

int main() { 

    unsigned short a; 
    cin >> a; 

    bool *b = new bool[a]; 

    for(int i = 0; i < a; ++i) 
    cin >> b[i]; 

    for(int i = 0; i < a; ++i) 
    cout << b[i]; 

    delete [] b; 

    return 0; 
} 

:

올바른 입력 :

5 
1 
0 
1 
0 
1 

올바른 출력 :하지만이 방법으로 원하는

10101 

:

이 같은 뭔가를

입력 :

5 
10101 

출력 :

10101 

답변

0

입력에서 문자를 읽을 수 있습니다.

for(int i = 0; i < a; ++i) { 
    char c; 
    cin >> c; 
    b[i] = static_cast<bool>(c - '0'); 
} 

주 : 차처럼, bool로로 변환 공백 문자를 무시 CIN로이, 한 줄과 여러 사람 모두 입력 할 수 있습니다.

+0

감사합니다. 작동하지만 c-'0 '을 의미하는 것은 무엇입니까? –

+0

char는 사실 8 (대부분의 아키텍처에서) 보유하는 문자의 ASCII 값에 해당하는 값의 비트 정수입니다. 연산은 문자 c의 ASCII 값에서 문자 '0'(48)의 ASCII 값을 빼기 때문에 '0'은 0이되고 '1'은 1이됩니다. 그러면 정수 0이 거짓이고 1이 같기 때문에 bool로 형변환 될 수 있습니다 참된. – nowaqq

+0

이것은 좋은 트릭입니다, 다시 한번 감사드립니다 :) –

0

당신은 bool들에 '0'을 char의를 문자열로 전체 입력을 읽은 다음 변환 '1'할 수 있습니다 :

#include <iostream> 
#include <string> 

int main() 
{ 

    std::string input; 
    std::cin >> input; 

    std::cout << "Input length was: " << input.length() << std::endl; 
    std::cout << "Output: "; 

    for (auto c : input) 
    { 
     std::cout << static_cast<bool>(c - '0'); 
    } 

    return 0; 
} 

enter image description here