본문 바로가기
Problem Solving/C++

string 관련 자주 쓰는 메소드 정리

by eunnnn 2023. 1. 8.

1. 기본 메소드

  • size() : 문자열 사이즈 반환
  • insert(위치, 문자열) : 특정 위치에 문자열 삽입
  • erase(위치, 크기) : 특정 위치에서부터 크기만큼 문자열 삭제
  • find(문자열) : 특정 문자열을 찾아 위치를 반환한다. 찾지못하면 string::npos가 반환된다.
  • substr(위치, 크기) : 특정 위치에서 크기만큼의 문자열을 추출한다.

 

2. split

C++은 split 함수를 따로 지원하지 않고 있어 자체적으로 구현이 필요하다. split을 구현하는 함수는 다음과 같다.

vector<string> split(string input, string delimiter) {
	vector<string> ret;
	long long pos = 0;
	string token = "";

	// input에서 못 찾을 때 까지 delimiter를 찾는다
	while ((pos = input.find(delimiter)) != string::npos) {
    	// 찾으면 delimiter의 앞까지 잘라내고 결과 배열에 저장한다
		token = input.substr(0, pos);
		ret.push_back(token);
        // delimiter의 길이까지 합산한 값을 지운다
		input.erase(0, pos + delimiter.length());
	}
	// 마지막에 남은 글자도 배열에 추가한다
	ret.push_back(input);
	return ret;
}

 

2-2. 공백 제거

문자열에서 공백을 제거하는 것은 split을 사용하지 않아도 erase, remove 함수를 써서 간단하게 구현할 수 있다.

코드는 다음과 같다.

string str = "hE ll O woR l d"
str.erase(remove(str.begin(), str.end(), ' '), str.end());
cout << str;

// 결과 : hEllOwoRld

 

3. reverse

string은 자체적으로 reverse 함수를 가지고 있지 않기 때문에, 문자열을 뒤집으려면 STL에서 제공하는 reverse 함수를 사용해야 한다. 이 때 원본 문자열 자체가 변형되는 것이므로 주의가 필요하다.

#include <bits/stdc++.h>
using namespace std;

int main(){
	string a = "Hello world";
	reverse(a.begin(), a.end());
	cout << a << '\n';
	reverse(a.begin()+3, a.end()); // begin에서 3만큼 뒤인 문자부터 reverse
}
/*
결과값
dlrow olleH
dlrHello wo
*/

 

4. 형변환

string -> int 변환은 stoi, int-> string 변환은 to_string()을 사용한다.

#include <bits/stdc++.h>
using namespace std;

int main() {
	string a = "1234";
	
    int num = stoi(a);
	cout << num << '\n';
    
    string s = to_string(num);
    cout << s << '\n';
}
/*
결과값
1234
1234
*/