[C++] 문자열 자르기, 3가지 방법

C++에서 문자열(String)을 분리하거나 어떤 문자를 기준으로 자르는 방법을 소개합니다.

1. substr()으로 문자열 자르기

substr()은 문자열의 Index에서 원하는 길이의 문자열을 잘라서 string으로 리턴합니다.

substr의 Syntax는 아래와 같습니다. 인자로 index와 길이를 받고 string을 리턴합니다.

string substr (size_t pos = 0, size_t len = npos) const;

아래 예제는 문자열의 특정 부분을 자르는 코드입니다. substr(0, 5)는 Index 0에서 시작하는 5개의 문자를 잘라서 string으로 리턴합니다. substr(6, 5)는 Index 6에서 길이 5의 문자열을 잘라서 리턴합니다.

#include <iostream>
#include <string>

int main () {

    std::string str = "Hello World, C++";

    std::string newstr1 = str.substr(0, 5);
    std::string newstr2 = str.substr(6, 5);
    std::string newstr3 = str.substr(13, 3);

    std::cout << newstr1 << std::endl;
    std::cout << newstr2 << std::endl;
    std::cout << newstr3 << std::endl;

    return 0;
}

Output:

Hello
World
C++

substring(6)처럼 Index만 인자로 전달하고 길이는 전달하지 않으면 문자열의 마지막까지 자릅니다. 아래와 같이 substr(6)은 Index 6에서 문자열의 마지막까지 잘라서 string으로 리턴합니다. substr(13)은 Index 13에서 문자열 마지막까지 잘라서 리턴합니다.

#include <iostream>
#include <string>

int main () {

    std::string str="Hello World, C++";

    std::string newstr1 = str.substr(6);
    std::string newstr2 = str.substr(13);

    std::cout << newstr1 << std::endl;
    std::cout << newstr2 << std::endl;

    return 0;
}

Output:

World, C++
C++

2. substr()과 find()로 문자열 분리하기

find(separator, index)는 인자로 전달된 Index에서 separator를 찾고 그 Index를 리턴합니다. separator가 없으면 npos를 리턴합니다.

아래 예제는 find()substr()을 이용하여 ,를 기준으로 문자열을 분리하는 예제입니다. 문자열 "Hello,World,C++"는 아래 코드에서 Hello, World, C++으로 분리됩니다. 동작 원리는 while 안에서 문자열의 :를 찾고 substr()으로 : 직전까지 문자열을 자르는 것입니다.

#include<iostream>
#include<string>

int main() {

    std::string str = "Hello,World,C++";
    std::string separator = ",";
    int cur_position = 0;
    int position;

    while ((position = str.find(separator, cur_position)) != std::string::npos) {
        int len = position - cur_position;
        std::string result = str.substr(cur_position, len);
        std::cout << result << std::endl;
        cur_position = position + 1;
    }

    std::string result = str.substr(cur_position);
    std::cout << result << std::endl;
}

Output:

Hello
World
C++

3. getline()과 istringstream으로 문자열 분리하기

getline()istringstream을 이용하여 위와 같이 구분자로 문자열을 분리할 수 있습니다. 문자열을 istringstream으로 변환하고, getline()을 통해 구분자를 기준으로 문자열을 읽어올 수 있습니다.

#include<iostream>
#include<string>
#include<sstream>

int main() {

    std::string str = "Hello,World,C++";
    char separator = ',';
    std::istringstream iss(str);
    std::string str_buf;
    while (getline(iss, str_buf, separator)) {
    	  std::cout << str_buf << std::endl;
    }

    return 0;
}

Output:

Hello
World
C++
Loading script...
codechachaCopyright ©2019 codechacha