c++ 문자열 파싱, 비교

doldol_kim·2020년 4월 27일
1

알고리즘

목록 보기
1/1

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

string str = "Bild"

  • 소문자 -> 대문자
    transform(str1.begin(), str1.end(), str1.begin(), ::toupper);
  • 대문자 -> 소문자
    transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
    touppertolower의 앞에 ::을 꼭 쓰자

문자열 찾기

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()를 통해 비워줘야 한다

구분자

split

profile
김돌돌입니다

0개의 댓글