땡글이LAB
[C++] 문자열 자르기 본문
C++에서 문자열을 자르는 데에는 여러 방법이 있는데 istringstream을 사용한 방법과 find + substr을 사용한 방법을 알아보겠다.
#1. istringstream 사용 - <sstream> 헤더 파일
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
using namespace std;
int main() {
string str = "c++ java python JS";
istringstream iss(str);
string tmp;
while (getline(iss, tmp, ' ')) {
cout << tmp << '\n';
}
}
getline 함수의 경우, 읽어들인 문자열의 길이를 return 해주기 때문에 위처럼 while문 안에서 getline 함수를 반복해서 돌려주면 읽어들인 문자열이 없는 경우(0가 return)까지 인자로 들어온 string을 구분자에 의해 분리되고 tmp에 입력해준 뒤 return 된다.
sstringstream을 사용하는 방법도 있지만, 구분자를 지정할 수 있는 istringstream이 사용하기에 훨씬 편해서 stringstream에 대한 설명은 하지 않겠다.
#2. find() + substr() 사용 - <string> 헤더 파일
#include <string>
#include <iostream>
using namespace std;
int main() {
string str = "c++ java python JS";
size_t previousPos = 0;
size_t currentPos = str.find(' ');
while (currentPos != string::npos) {
string substring = str.substr(previousPos, currentPos - previousPos);
cout << substring << '\n';
previousPos = currentPos + 1;
currentPos = str.find(' ', previousPos);
}
//마지막 문자열 출력
cout << str.substr(previousPos, currentPos - previousPos) << '\n';
}
currentPosition이 stinrg::npos(문자열의 끝)가 될 때까지 while문에서 부분 문자열을 추출해낸다. 마지막에 currentPosition이 string::npos에 도달하면 while문을 탈출한 뒤 마지막 부분 문자열을 substr 함수를 통해 가져온 뒤, 종료시킨다. substr은 시작 문자열의 index를 처음 인자로 입력받고, 읽어들일 문자의 개수를 두 번째 인자로 입력받아서 부분 문자열을 추출해준다.
istringstream 을 사용했을 때보다 코드가 길어지고 조금 불편해진 느낌이 있다. 하지만 만약 전체 문자열 중에 특정 부분만 추출해내고 싶다면 find + substr 함수를 사용하면 istringstream 보다 더 편리하게 사용할 수 있을 것이다.
#include <string>
#include <iostream>
using namespace std;
int main() {
string str = "c++ java python JS";
string java = str.substr(4, 4);
string py = str.substr(9, 6);
cout << java << '\n' << py << '\n';
}
'Programming Language > C++' 카테고리의 다른 글
[C++] set, multiset, unordered_set 의 차이 (0) | 2022.02.12 |
---|---|
[C++] iterator (반복자) 정리 (0) | 2022.01.20 |
Comments