컴퓨터 언어/C++

[c++] 공백이 포함된 문자열의 입력 활용예제

  • -
728x90
반응형

일반적으로 c++의 경우에는

cin을 활용하여 문자를 받아들이게 되는데, 이 경우에는 scanf와 마찬가지로 공백을 기준으로 자른다.

 

즉, tab, 띄어쓰기, 엔터등이 올 때까지 문자를 받아들인 뒤 공백이 등장하면 공백 전까지를 저장시킨다.

(앞의 글에서 언급한 것처럼 buffer에는 이들의 정보가 남아있다.)

 

따라서 일반적으로 띄어쓰기도 하나의 문자열의 정보로 받아들이기 위해서는 위의 방식처럼 활용할 수 없다는 것을 알 수 있다.

그래서 사용하게 되는 함수가 getline이다.

 

c++에서는 일반적으로 string 자료형을 사용하기 때문에, 원래는 getline함수가 2가지이지만 string 자료형을 사용하는 케이스만을 다루도록 하겠다.

 

사용하는 방법은

 

getline(cin, 정보를 받을 string type인 변수, (기본적으로는 엔터를 기준으로 하나, 다른 것을 기준으로 구획할 수도 있다.))

다음과 같다.

 

크게 보면 3개의 파라미터를 요구로 하는데, 마지막 3번째 인자는 기본적으로는 "\n"으로 설정되어있어서 엔터를 기준으로 구획하려고 하는 경우에는 따로 적어놓을 필요가 없으나 만약 다른 문자를 기준으로 자르고자 하는 경우에는 해당 문자열을 입력해놓으면 된다.

단, char type으로 적어야 한다.

 

위의 내용을 활용한 문제는 다음과 같다.

 

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main(void){
    string input_data;
    getline(cin, input_data, '\n'); // string store containing blank
    
    int size_of_string = input_data.size();

    bool blank_check = true; // Count with considering blank status
    int count = 0;
    
    for(int i = 0; i < size_of_string; i++){

        if (input_data[i] == ' '){
            blank_check = true; // Blank state change
        }

        else{
            if(blank_check == true){
                count += 1; 
            }

            blank_check = false;
            
        }
    }

    cout << count << "\n";

    return 0;
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.