这个涉及到++运算符两种不同运算特点
分为:前缀和后缀两种例如题中的(++i)和(i++)分别就是 前缀 和 后缀
一个前缀的++运算符会把运算对象+1 然后再参与整个表达式的运算
例如:s=(++i)+(++i)+(++i)等价于s=6+6+6 你一定奇怪怎么全部变成6了? 你要知道++i意味着i的值发生了改变
一开始i就+1变成了4 (你要知道每一次的i的值改变就意味着所有的i都会发生了改变)
那么中间的++i当然就是5最后的++i当然就是6了 (所以全部是6)
所以你题目中第二个pring输出的s = 16 而i=6(因为i被++的前缀运算符执行了3次)
2.一个后缀的++运算符会先用它的运算变量参与整个表达式的运算等到这个被运算的变量出现在下一个表达式中才会看到+1的效果
例如:s=(i++)+(i++)+(i++)等价于s=3+3+3
所以你题目中第一个pring输出的s = 9 而i=6(因为i被++的后缀运算符执行了3次)
懂了吗?
b就不是2,因为b=c++应该这样解释:c的值先赋给b,然后才自加一如果是b=++c那么b的值就是2这就是++在后和在前的区别.
(1)中c的值确实重新赋为1,只是因为++在后面,才导致b=1
(2)之后c的值是2,printf(...)中,其值变为3,如果你把
printf("%d %d %d\n",a,b,++c)换为printf("%d %d %d\n",a,b,c++)
那么将会输出1,1,2。
#include<stdio.h>#include<iostream>
#include<string>
#include<stack>
using namespace std
int main() {
string str
stack<char>mystack
while (getline(cin, str)) {
printf("\n")
for (int i = 0i <str.size()i++) {
if (str[i] == 'a' or str[i]==',') {
cout <<str[i]
}
else if (str[i] == '+' or str[i] == '-' or str[i] == '*' or str[i] == '/' ) {
mystack.push(str[i])
}
else if (str[i] == '(') {
cout <<str[i]
}
else if (str[i] == ')') {
cout <<str[i] <<mystack.top()
mystack.pop()
}
}
}
}