http://acmicpc.net/problem/5026
처음에는 아래와 같은 코드를 짰었다.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string q;
cin >> q;
if (q == "P=NP") cout << "skipped" << endl;
else {
cout << (q[0] - '0') + (q[2] - '0') << endl;
}
}
return 0;
}
그런데 저렇게 아스키코드를 가지고 연산하는 경우 숫자가 두자리 수가 되면 성립하지 않는다...
그래서 아래처럼 stoi를 이용해 안전하게 파싱하는 방법을 이용해 다시 코드를 짜봤다.
문자열.find(찾을문자) 를 통해 해당 문자열에서 찾으려는 문자가 위치하는 인덱스를 반환할 수 있다! 이걸 이용해 먼저 +의 위치를 저장해준다.
stoi(문자) 함수는 문자를 정수로 변환해준다. string to int를 줄여서 stoi이다.
substr(시작위치, 끝낼위치) 는 지정한 범위 내에 위치하는 문자열을 반환한다. 끝낼 위치를 지정하지 않는 경우 끝까지 반환한다. 이걸 이용해 + 전의 숫자, + 이후의 숫자를 반환해 stoi로 정수로 변환해주고 각각 a, b 변수에 저장해준다.
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string q;
cin >> q;
if (q == "P=NP") cout << "skipped" << endl;
else {
int plusPos = q.find('+');
int a = stoi(q.substr(0, plusPos));
int b = stoi(q.substr(plusPos + 1));
cout << a + b << endl;
}
}
return 0;
}