C++에서 문자열을 좀더 편하게 다뤄봅니다.
regex
와stringstream
글을 작성하기전에
이 글에서 다루는 내용은 아주 얕습니다.
- 저는
C++
를 잘하지 못합니다. PS
를 위한 사용법 정도만 간단히 다루어 봅니다.- 나중에 자세히 알게되면 정리 포스팅을 추후 작성할 수…도 있습니다.
Regex
#include<regex>
C++ 11
부터 정규식이 추가 되었습니다.- 원리 같은것도 파악하지 않고, 파싱을 위한 아주 기초적인 사용법만 익혀봅니다.
사용법
정규식을 만들어줍니다.
reg("정규식")
1 |
|
- 해당 정규식은 숫자를 파싱하는 정규식입니다.
- 정규식에 익숙치 않으시면 RegExr 에서 연습하시기를 적극 권장합니다.
regex용 iterator 를 만듭니다.
stregex_iterator name;
- 일치하는 정규식을 찾지못하는 경우
end
를 반환합니다. - 즉 찾지 못하는 경우를 처리하기 위해
const sregex_iterator end;
를 만들어 줍니다. - 정규식을 찾아나갈
start
를 만듭니다. - sregex_iterator
start(string.begin(), string.end(), regex);
1 |
|
매칭되는 문자열을 찾습니다.
본래는
smatch
도 설명하고 사용해야 하나, 건너뜁니다.
1 |
|
예제 소스
1 |
|
결과
1 |
|
stringstream
#include<sstream>
- 타입과 매칭되는것이 나올때까지 탐색합니다.
- 중간에 매칭되는것이 없으면 종료됩니다.
- 재사용을 위해서는 초기화 작업이 추가적으로 필요합니다.
사용법
문자열을 받을 stringstream 을 만듭니다.
stringstream name(string)
1 |
|
찾을 타입을 정하고 순회합니다.
while (ss >> num)
정수
,실수
,문자열
등등 이 가능합니다.cin
후>>
이 console의 input을 stdin 에 넣는것처럼- stringstream을 num에 넣어줍니다.
1 |
|
재사용을 위해서 초기화를 해줍니다.
stringstream_name.clear()
,stringstream_name.str("")
clear
를 해주어야 정상적으로 탐색합니다.
1 |
|
예제 소스
1 |
|
결과
1 |
|
전체소스
1 |
|
전체 결과
1 |
|
응용
1 |
|
응용 결과
1 |
|
Reference
- https://word.tistory.com/24
- https://modoocode.com/