Language/C++

C++ 문자열 관련 함수, 알고리즘 모음 (코테 준비)

0m1n 2022. 9. 20. 14:33
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
반응형