어제의 나보다 성장한 오늘의 나

[c++] 문자열 자르기 / 쪼개기 (Substr , Sstream , Strtok) 총정리 및 예제 본문

c++/문법

[c++] 문자열 자르기 / 쪼개기 (Substr , Sstream , Strtok) 총정리 및 예제

today_me 2022. 2. 19. 15:04
반응형

1) s.substr(시작 위치 , 문자열의 길이)

 

string s = "0123456789";

string subs1 = s.substr(2,5); // subs1 = "23456"

 

string s = "0123456789";

string subs1 = s.substr(5); // subs1 = "56789"

 

string s = "0123456789";

string subs1 = s.substr(); // subs1 = "0123456789"

 

시작 위치문자열의 길이를 입력 받아서 문자열을 자른다.

숫자 하나만 집어넣으면 시작 위치로 인식되어 시작 위치 부터 끝까지로 문자열을 자른다.

아무 것도 넣지 않으면 s 전체가 복사 됨.

 

find 함수와 함께 사용

string s = "0123456789";

string subs1 = s.substr(s.find('6')); // subs1 = "6789"

 

string s = "0123456789";

string subs1 = s.substr(s.find('6'),2); // subs1 = "67"

 

2) stream을 이용한 쪼개기

 

헤더파일

#include <sstream>
#include <vector> // 벡터에 담을 거라서.

 

string s = "012 34567 89";

istringstream ss (s);
string subs1; // temp역할하는 substr 변수 -> 012 , 34567 , 89
vector<string> v;

    while(getline(ss,subs1,' ')){
        v.push_back(subs1); // v = {"012" , "34567" , "89"}
    }

getline ( Stream 이름 , temp 변수 , 자를 기준 문자열)

반응형

3) c의 strtok 함수 사용

 

헤더파일

#include <string.h>

 

 

strtok( 자를 문자열 , 기준 문자 )

char str[] = "a b c d e f";
char* p_str = strtok(str," ");
    
while(p_str != NULL){
    cout << p_str << ' ';
    p_str = strtok(NULL," ");
}
//출력 : a b c d e f;

기준 문자는 무조건 "" 로 감싸져야 한다. 위의 경우 띄어쓰기를 기준 문자로 잡은 것.

 

 

기준 문자 여러 개 설정

char str2[] = "a-b,c:d e-f";
char* p_str2 = strtok(str2,",- :");

while(p_str2 != NULL){
    cout << p_str2 << ' ';
    p_str2 = strtok(NULL , ",- :");
}
//출력 : a b c d e f
반응형
Comments