getline()을 사용한 문자열 분할std::getline() 함수는 특정 구분자를 기준으로 문자열을 추출하는 함수다. 기본적으로 개행 문자('\n')를 기준으로 동작하지만, 원하는 구분자를 설정할 수도 있다.
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string input = "Hello world this is C++";
std::stringstream iss(input);
std::string buff;
while (getline(iss, buff, ' ')) { // 공백(' ')을 기준으로 문자열 분할
std::cout << buff << std::endl;
}
return 0;
}
getline() 방식의 특징✅ 공백을 기준으로 문자열을 분리
✅ 연속된 공백도 빈 문자열로 처리 가능
✅ 사용자가 직접 구분자를 지정 가능
❌ getline()은 기본적으로 string 타입만 지원하며, 숫자로 변환하려면 추가 작업이 필요
operator >>를 사용한 문자열 분할스트림 입력 연산자 >>를 사용하면 공백을 기준으로 자동으로 문자열을 나눌 수 있다.
#include <iostream>
#include <sstream>
#include <string>
int main() {
std::string input = "Hello world this is C++";
std::stringstream iss(input);
std::string word;
while (iss >> word) { // 공백을 자동으로 구분자로 사용
std::cout << word << std::endl;
}
return 0;
}
operator>> 방식의 특징✅ 공백을 자동으로 구분자로 인식
✅ getline()과 달리 연속된 공백을 무시
✅ 문자열뿐만 아니라 int, double 등 숫자 변환도 가능
❌ 연속된 공백을 포함한 빈 문자열을 분리할 수 없음
이 방식은 숫자를 다룰 때 유용하다.
#include <iostream>
#include <sstream>
int main() {
std::string input = "10 20 30 40 50";
std::stringstream iss(input);
int number;
while (iss >> number) { // 숫자로 자동 변환
std::cout << number * 2 << std::endl;
}
return 0;
}
find()와 substr()을 사용한 문자열 분할std::string의 find()와 substr() 함수를 이용하면 공백을 기준으로 직접 문자열을 분할할 수 있다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string input = "Hello world this is C++";
size_t pos = 0;
string token;
string delimiter = " ";
while ((pos = input.find(delimiter)) != string::npos) {
token = input.substr(0, pos); // 첫 번째 단어 추출
cout << token << endl;
input.erase(0, pos + delimiter.length()); // 앞부분 삭제
}
cout << input << endl; // 마지막 단어 출력
return 0;
}
find() + substr() 방식의 특징✅ 문자열을 직접 다룰 수 있음
✅ 원본 문자열을 변형하지 않도록 erase()를 사용하지 않고 substr()을 활용 가능
✅ 다른 구분자를 쉽게 적용할 수 있음
❌ erase()를 사용하면 원본 문자열이 변경됨
❌ 처리 속도가 상대적으로 느릴 수 있음
👉 erase()를 사용하지 않는 방법:
#include <iostream>
#include <string>
using namespace std;
int main() {
string input = "Hello world this is C++";
size_t start = 0, end;
string delimiter = " ";
while ((end = input.find(delimiter, start)) != string::npos) {
cout << input.substr(start, end - start) << endl;
start = end + delimiter.length();
}
cout << input.substr(start) << endl; // 마지막 단어
return 0;
}
| 방법 | 공백 처리 | 빈 문자열 포함 | 숫자 변환 | 속도 |
|---|---|---|---|---|
getline() | 지정한 구분자로 분할 | ✅ 포함 가능 | ❌ 직접 변환 필요 | 보통 |
operator>> | 공백 기준 자동 분리 | ❌ 연속된 공백 무시 | ✅ 숫자 변환 가능 | 빠름 |
find() + substr() | 직접 구분자 지정 가능 | ✅ 포함 가능 | ❌ 직접 변환 필요 | 느림 |