string의 find 함수가 해당 문자가 존재하는지 안하는지 불린 값을 반환하는 함수로 착각하여 오답을 제출하였다
라이브러리 함수를 더 정확히 알고 쓸 수 있도록 공부해야겠다
#include <iostream>
#include <string>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string input;
int flag = 0;
//string::npos = -1
while (true) {
cin >> input;
if (cin.eof()) break;
int found;
if (flag == 0) {
found = input.find('U');
if (found != -1) {
input = input.substr(found, -1);
++flag;
}
}
if (flag == 1) {
found = input.find('C');
if (found != -1) {
input = input.substr(found, -1);
++flag;
}
}
if (flag == 2) {
found = input.find('P');
if (found != -1) {
input = input.substr(found, -1);
++flag;
}
}
if (flag == 3) {
found = input.find('C');
if (found != -1) {
cout << "I love UCPC";
return 0;
}
}
}
cout << "I hate UCPC";
return 0;
}
- 문자열을 찾았다면, 해당 문자열이 처음으로 나타날 때의 시작 위치를 리턴한다
문자열을 찾지 못 한 경우 npos를 리턴한다- unsigned int 타입의 string::npos는 int로 변환했을 때 대응되는 값이 -1이다
basic_string substr(size_type pos = 0, size_type count = npos) const;
- 문자열의 pos 번째 문자 부터 count 길이 만큼의 문자열을 리턴한다
- 전달된 count가 문자열 보다 길다면, 그 이상을 반환하지 않고 문자열의 끝까지만 리턴한다
- 전달된 count가 npos라면, 자동으로 pos부터 원래 문자열의 끝까지 리턴한다