[참고자료] 문자열 유용한 함수 정리
[ 띄워쓰기를 포함하여 Enter 칠 때까지 문자열 입력받기 ]
cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자);
ex) cin.getline(str, 100);
getline(입력스트림 오브젝트, 문자열을 저장할 string객체, 종결 문자);
ex) getline(cin, str);
@ 주의사항: cin >> int형 변수; 을 사용하고 나서 바로 getline(cin, str); 을 사용하면 getline에서 문자열을 입력받지 않고 바로 다음 코드로 넘어간다.
이유: 버퍼에 정수 값을 입력한 뒤 누른 엔터('\n')가 그대로 남아있어 getline()에 들어가기 때문
따라서 cin.ignore() 함수를 사용하여 입력 버퍼의 모든 내용을 제거해줘야 getline 함수가 정상적으로 동작
int n;
string str;
cin >> n;
cin.ignore();
getline(cin, str);
[ 특정 문자열을 기준으로 잘라 vector에 저장하기 ]
#include <sstream> 추가
stringstream ss(문자열 str);
string temp; // 저장될 문자 단위?
vector<string> strVector;
while(getline(ss, temp, ' ')) // 맨 마지막에 나눌 단위
strVector.push_back(temp);
[ 문자열 치환 방법 ]
1. replace 사용
- str.replace(0, 2, "st"); // 구간을 매개변수로 주고 치환문자를 준다
2. regex_replace 사용
- #include <regex> 추가
- regex_replace(str, regex("바꿀문자열"), "사용할 문자");
ex) string str = "aaa zzz";
regex_replace(str, regex("a"), "z");
-> str = "zzz zzz";
[ 문자열 소문자/대문자 변환 방법 ]
#include <string>
소문자 변환 : char changeWord = tolower(word);
대문자 변환 : char changeWord = toupper(word);
[ 문자열 뒤집기 ]
#include <algorithm>
string str = "123";
reverse(begin(str), end(str));
결과: 321
[ 문자열 맘대로 정렬하기 ]
1. vector<string> 정렬
- #include <algorithm> 헤더 추가
sort(strings.begin(), strings.end(), comp(비교함수명 넣기));
bool comp(string str1, string str2)
{
return str1[N] < str2[N]; // 알파벳 사전순 정렬
}
- 비교함수를 작성해서 넣어주면 된다.
2. priority_queue, set 정렬
- priority_queue<string, vector<string="">, MyCompare> pq;</string,>
- set<string, MyCompare> s;
struct MyCompare
{
bool operator() (string s1, string s2)
{
return s1.length() > s2.length(); // 문자열 길이 정렬
}
};