Я решал ArithmaticII .Я получаю правильный вывод для ввода ниже:
4
1 + 1 * 2 =
29 / 5 =
103 * 103 * 5 =
50 * 40 * 250 + 791 =
Вывод:
4
5
53045
500791
Я получаю правильный вывод, но когда я отправляю свое решение в spoj, я получаюSIGABRT
ошибка во время выполнения.
Примечание: он также может содержать пробелы для улучшения читабельности.
Так как ввод может не содержать пробелов, как я могу это обработать, потому что это вызывает ошибку.
потому что моя программа останавливается (ошибка времени выполнения), когда я не предоставляю место на входе (1 * 1 + 2 =)
terminate called after throwing an instance of 'std::invalid_argument'
what(): stoll
Пожалуйста, помогите.Что мне делать?
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
int t;
string str;
cin >> t;
while (t--) {
///using cin.ignore() as input as preceded by a single line
cin.ignore();
getline(cin, str, '\n');
stringstream split(str);
///now use getline with specified delimeter to split string stream
string intermediate;
int flag = 0;
long long int ans=1;
while (getline(split, intermediate, ' ')) {
if (intermediate == "=") {
cout << ans<<"\n";
break;
}
if (intermediate == "*") {
flag = 1;
continue;
}
else if (intermediate == "/") {
flag = 2;
continue;
}
else if (intermediate == "+") {
flag = 3;
continue;
}
else if(intermediate == "-"){
flag = 4;
continue;
}
if (flag == 1) {
ans *= stoll(intermediate);
}
else if (flag == 2) {
ans /= stoll(intermediate);
}
else if (flag == 3) {
ans += stoll(intermediate);
}
else if (flag == 4) {
ans -= stoll(intermediate);
}
else if (flag == 0) {
ans = stoll(intermediate);
}
}
}
}