728x90
반응형
C++은 자바 파이썬에 비해 문자열처리가 아무래도 좀 약하다..
문제를 풀면서 자주 썼고 쓸만한 함수와 알고리즘을 모아두려 한다. (계속 추가 예정)
1. 공백 or 특정 문자 제거하기
단순히 공백을 제거하는 방법
c++ remove 함수는 요소를 삭제하지만, 삭제된 개수만큼 길이가 줄어드지 않는다.
즉 뒤의 요소를 하나씩 이동시키는 방식이다.
따라서, remove로 특정 문자를 제거해준뒤, erase로 비어있는 공간을 삭제해주면 된다.
str.erase(remove(str.begin(), str.end(), ' '), str.end());
2. char 숫자 int 로 빠르게 변환
'0' 을 빼주는 방식으로 구현하면 빠르게 변환이 가능하다!
string str = "51"
int k = str[0] - '0'; // 5
char ch = str[1];
k = ch - '0'; // 1
3. 문자열 split
여러가지 방법이 있는데, 첫 번째 방법은 istringstream을 이용한 방법이다.
istringstream은 sstream을 include해야 사용할 수 있다.
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
string str = "hello my name is 0m1n";
string str_split;
istringstream ss(str);
vector<string> v;
while (getline(ss, str_split, ' '))
{
v.push_back(str_split);
}
for(auto elem : v) cout << elem << " / ";
return 0;
}
// hello / my / name / is / 0m1n / 출력
find와 substr로 분리하는 방법도 있다! (공백 예시)
str = str.substr(str.substr(0, str.find(" ")) + 1, str.size() - 1)
가장 유용하게 사용하고 있는 방법이다.
stringstream 으로 받아 하나씩 넣어주면 된다!
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(void) {
string str = "hello my name is 0m1n";
stringstream ss;
ss.str(str);
string test[5];
for(int i = 0 ; i < 5; i++){
ss >> test[i];
}
for(auto elem : test)
cout << elem << '\n';
ss.clear();
}
// hello / my / name / is / 0m1n
728x90
반응형