从右到左 vs 从左到右:字符串转整数的两种方式
假设字符串:"123"
-
正常从左到右(顺序处理)是:
-
'1'
是百位,1 * 100
-
'2'
是十位,2 * 10
-
'3'
是个位,3 * 1
-
结果是
123
-
而这段代码是从右往左处理:
int num = 0;
int sign = 1;
for (int i = strlen(expr)-1; i >= 0; i--) {num += (expr[i] - '0') * sign;sign *= 10;
}
-
i = 2 →
'3'
:3 × 1 →num = 3
-
i = 1 →
'2'
:2 × 10 →num = 23
-
i = 0 →
'1'
:1 × 100 →num = 123
换种方式(从左到右)写就会是这样:
int num = 0;
for (int i = 0; i < strlen(expr); i++) {num = num * 10 + (expr[i] - '0');
}