프로그래머스에서 문제를 풀다보면 입력이 문자열로 주어지는 경우가 많다. C++은 문자열 관련 기능이 다른 언어에 비해 빈약하기 때문에 정리해두자
compare
함수
str1.compare(str2)
의 결과값이
또한 두 문자열의 부분 문자열을 비교할 수 있다.
str1
의 0번째 인덱스부터 길이가 2인 문자열과 str2
의 0번째 인덱스부터 길이가 2인 문자열 끼리 비교. 리턴값은 위와 같음
str1 = "HelloWorld"
str2 = "HelloMyWorld"
str1.compare(0,2,str2,0,2);
transform
함수
string str = "Bild"
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
예를 들어 입력이
{"Go Lee 5", "Go Park 10", "Stop Kim 6"} 이런식으로 공백이 포함된 문자열로 들어온다고 하면 공백을 기준으로 명령어, 이름, 숫자로 파싱해야하는 경우이다.
이때 사용하면 좋은 것이 stringstream 이다
stringstream ss;
ss.str(pages[i]);
string str;
while(ss>>str){
cout<<str<<endl;
}
ss.clear();
이럴 경우, str에는 공백을 기준으로 문자열이 담긴다.
또한 ss에 버퍼가 쌓이는 것이므로, 새로운 문자열을 넣어야 할 경우 ss.clear()
를 통해 비워줘야 한다