using llong = long long;
bool isop(char ch) {
return ch == '+' || ch == '-' || ch == '*';
}
int calculate(llong left, char op, llong right) {
if (op == '+') return left + right;
else if (op == '-')return left - right;
return left * right;
}
int main()
{
string s = "+-12+4dd12345678dd+4dd*4+1-3++dd12*4dd34-+2-1+4";
int n = s.length();
long long left = 0, right = 0, store = 0;
char op = 0;
int i = 0, ans = 0;
int start = 0, end = 0;
while (i < n) {
int cur = i;
while (!isop(s[i]) && !isdigit(s[i])) {
++i;
start = i;
}
while (isop(s[i])) {
op = s[i++];
}
if (!op || i - cur > 1) {
left = 0;
if (op == '+' || op == '*') {
op = 0;
continue;
}
}
while (isdigit(s[i])) {
if (op) {
right = right * 10 + s[i] - '0';
}
else {
left = left * 10 + s[i] - '0';
}
++i;
}
if (op) {
int val = calculate(left, op, right);
if (left && ans < i - start) {
ans = i - start;
store = val;
}
left = val;
right = 0;
end = i;
}
op = 0;
}
cout << ans << " " << store;
}
提取字符串中的最长数学表达式并计算
最新推荐文章于 2024-08-01 08:05:19 发布