정석은 아니지만...
getline을 사용하면 문자열을 손쉽게 자를 수 있다.
getline(&istream is, &string str, char delim)
- is는 cin이나 stringstream
- str은 자른 문자열
- delim은 기준점이다.
원래 정의대로 라면 delim 문자를 만나면 문자열 추출이 중단된다. 이걸 이용해서 tokenize해보자.
일단 is 자리에 들어갈 stringstream이 필요하다.
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
int main(void){
string s = "This,is,the,test!";
char delim = ' ';
stringstream ss(input);
string buffer;
while(getline(ss, buffer, ','){
cout<<buffer<<" ";
}
//출력 결과: This is the test!
return 0;
}
stringstream.str 사용: 공백으로 문자열 분리할 때
stringstream
- #include <sstream>
- 주어진 문자열에서 필요한 정보를 빼낼 때 유용하게 사용된다.
- 스트링 버퍼를 사용하여 sequence of chars를 저장. 이 sequence는 .str()함수를 사용한다면 string object로 접근가능하다.
- 주요 함수
- .str(string s) 이전 내용물을 버리고 현재 stream을 s로 설정한다.
- .clear() ss가 다음 문자열을 받기 전에 비워주는 역할
int num;
stringstream ss;
string str1 = "25 1 3 .235\n1111\n2222";
ss.str(str1);
while(ss >> num){ //조건에 맞는 문자열만 출력한다. 이 예시에선 3까지 출력
cout<<"num: "<< num << endl;
}
만약에 int num 대신 float num으로 선언한다면 모두 출력할 것이며 .235는 0.235의 형태로 출력될 것이다.
참고로 str1값이 변하진 않는다!
공백으로 문자열 자르기
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
int main(void)
{
string str = "1 lee 100 / 2 moon 98 / 3 son 78";
stringstream ss(str);
string line;
int num, score;
string name;
while (getline(ss, line, '/'))
{
stringstream ss1;
ss1.str(line);
ss1 >> num;
ss1 >> name;
ss1 >> score;
cout << num << "th "
<< "name is " << name << " and score is " << score << endl;
ss1.clear();
}
return 0;
}
'프로그래밍 언어 > c c++' 카테고리의 다른 글
[c c++] isdigit 함수 (0) | 2020.10.19 |
---|---|
[c++] STL priority_queue 우선순위 큐 (2) | 2020.10.19 |
[c++] accumulate 함수 (0) | 2020.10.06 |
[c c++] 문자열을 특정 문자 기준으로 자르기1 strtok (0) | 2020.04.11 |
[c] 문자열 입력 (0) | 2020.04.11 |
댓글