求助,为何反转不成功

P1553 数字反转(升级版)

@[Star0925](/user/990783) 运算符 `!` 的优先级比 `<=` 或者 `>=` 要高,因此您的代码实际运行结果与您的预期不一致。
by metaphysis @ 2023-06-13 10:11:00


@[metaphysis](/user/333388) 这是用来判断是否为符号呀
by Star0925 @ 2023-06-13 20:03:30


@[Star0925](/user/990783) 由于运算符优先级的关系,您这样写,无法判断是否有符号,因为 `if` 语句的结果始终为假。 ``` #include<bits/stdc++.h> using namespace std; int main(int argc, char *argv[]) { string s; bool b; while (cin >> s) { b = true; for(int i=0; i < s.size(); i++) { if(!s[i] >= '0' && !s[i] <= '9') { b = false; break; } } cout << s << ' ' << (b ? 1 : 0) << '\n'; } return 0; } ``` 给定输入: ``` +1234 -1234 1234 ``` 输出为: ``` +1234 1 -1234 1 1234 1 ``` 为什么?因为 `!` 的优先级比 `<=` 以及 `>=` 都要高,对于条件 `!s[i] >= '0' && !s[i] <= '9'`,先执行非运算 `!`,显然 `!s[i]` 的值为 `0`,但是字符 `'0'` 和 `'9'` 的值不为零,因此这个判断条件永远为假,也就是说不会执行 `if` 语句里面的分支。
by metaphysis @ 2023-06-14 08:07:49


@[metaphysis](/user/333388) 感谢指导
by Star0925 @ 2023-06-15 21:17:41


|