땡글이LAB

[C++] 문자열 자르기 본문

Programming Language/C++

[C++] 문자열 자르기

땡글이B 2022. 1. 20. 15:44

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