Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문장을 공백 기준으로 단어별로 나누는 방법

C++에서 문장을 단어로 분리하기

이번 글에서는 하나의 문장을 공백을 기준으로 개별 단어로 나누는 방법을 알아봅니다. 문장에 포함된 모든 단어를 추출하여 각각 별도의 줄에 출력하는 것이 목표입니다.

입력

I am a good boy

출력

I
am
a
good
boy

위 예시처럼 각 단어가 한 줄에 하나씩 출력됩니다.

동작 원리

구현 방식은 간단합니다. 문자열을 처음부터 끝까지 한 글자씩 순회하면서, 공백 문자를 만나면 그때까지 누적한 단어를 출력하고 버퍼를 초기화합니다. 공백이 아닌 문자는 현재 단어에 계속 이어 붙입니다. 마지막 단어 뒤에는 공백이 없으므로, 반복문이 종료된 후 남은 단어를 한 번 더 출력해 주어야 합니다.

예제 1

#include <iostream>
#include <string>
using namespace std;

void split(string st) {
    string word = "";
    for (char s : st) {
        if (s == ' ') {
            cout << word << endl;
            word = "";
        } else {
            word = word + s;
        }
    }
    cout << word << endl;
}

int main() {
    string st = "Blood from heaven is mortal";
    cout << "Blood from heaven is mortal" << endl;
    split(st);
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Blood from heaven is mortal
Blood
from
heaven
is
mortal

예제 2

#include <iostream>
#include <string>
using namespace std;

void split(string st) {
    string word = "";
    for (char s : st) {
        if (s == ' ') {
            cout << word << endl;
            word = "";
        } else {
            word = word + s;
        }
    }
    cout << word << endl;
}

int main() {
    string st = "type a text message";
    cout << "type a text message" << endl;
    split(st);
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

type a text message
type
a
text
message

참고: 더 간결한 대안

위 방법은 문자열 처리의 기본 원리를 이해하는 데 유용하지만, 실무에서는 <sstream> 헤더의 istringstream을 활용하면 훨씬 간결하게 구현할 수 있습니다.

#include <sstream>
...
istringstream iss(st);
string word;
while (iss >> word) {
    cout << word << endl;
}

스트림 연산자 >>는 자동으로 공백을 구분자로 처리해 주기 때문에, 직접 문자를 순회하는 코드보다 가독성과 안정성 면에서 유리합니다. 학습 목적이라면 두 가지 방식 모두 익혀두는 것을 권장합니다.