Programming/C++

C++ 문자열 파싱, 비교

돌돌김 2020. 9. 12. 17:09

프로그래머스에서 문제를 풀다보면 입력이 문자열로 주어지는 경우가 많다. 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