프로그래머스에서 문제를 풀다보면 입력이 문자열로 주어지는 경우가 많다. C++은 문자열 관련 기능이 다른 언어에 비해 빈약하기 때문에 정리해두자
문자열 비교
compare 함수
- str1.compare(str2)의 결과값이
- -1 : str1이 str2보다 사전적으로 앞에 있음
- 0 : str1과 str2는 같은 문자열임
- 1 : str1이 str2보다 사전적으로 뒤에 있음
또한 두 문자열의 부분 문자열을 비교할 수 있다.
str1의 0번째 인덱스부터 길이가 2인 문자열과 str2의 0번째 인덱스부터 길이가 2인 문자열 끼리 비교. 리턴값은 위와 같음
str1 = "HelloWorld"
str2 = "HelloMyWorld"
str1.compare(0,2,str2,0,2);
대소문자 전환
transform 함수
- 소문자 -> 대문자
transform(str1.begin(), str1.end(), str1.begin(), ::toupper); - 대문자 -> 소문자
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
toupper과 tolower의 앞에 ::을 꼭 쓰자
문자열 찾기
find 함수
- str1.find(str2) 일 때, str1의 부분 문자열 중 str2가 있으면 그 시작 위치를 return 한다.
- 만약 없으면 -1을 return 한다.
str1 = "Hello World";
str2 = "World";
return str1.find(str2) // 6
str1 = "Hello World";
str2 = "Wor";
return str1.find(str2) // 6
str1 = "Hello World";
str2 = "Wro";
return str1.find(str2) // -1
문자열 파싱
stringstream
- 예를 들어 입력이 {"Go Lee 5", "Go Park 10", "Stop Kim 6"} 이런식으로 공백이 포함된 문자열로 들어온다고 하면
- 공백을 기준으로 명령어, 이름, 숫자로 파싱해야하는 경우이다.
- 이때 사용하면 좋은 것이 stringstream 이다. 이럴 경우, str에는 공백을 기준으로 문자열이 담긴다.
- 또한 ss에 버퍼가 쌓이는 것이므로, 새로운 문자열을 넣어야 할 경우 ss.clear()를 통해 비워줘야 한다
stringstream ss;
ss.str(pages[i]);
string str;
while(ss>>str){
cout<<str<<endl;
}
ss.clear();
'Programming > C++' 카테고리의 다른 글
C++ STL 정리 - sort 함수 (0) | 2019.11.28 |
---|