AcWing 87. 把字符串转换成整数
原题链接
中等
作者:
密集指针
,
2020-08-21 09:31:26
,
所有人可见
,
阅读 7437
分享一个字符串处理的小技巧,不用每次判断下标索引是否越界,提升代码可读性与实用性
- 在字符串后面加上一个空字符‘\0’,当下标指向‘\0’时,下标将不会继续前进(代入实际情况理解一下就好了),从而防止了下标越界
class Solution {
public:
int strToInt(string s) {
s += '\0';
int i = 0;
while(s[i] == ' ') ++i;
long ret = 0;
bool isPos = false;
if(s[i] == '-' || s[i] == '+'){
if(s[i] == '-') isPos = true;
++i;
}
while(s[i] >= '0' && s[i] <= '9'){
ret = ret * 10 + s[i] - '0';
++i;
if(!isPos && ret >= INT32_MAX) return INT32_MAX;
if(isPos && ret - 1 >= INT32_MAX) return INT32_MIN;
}
return isPos ? -ret : ret;
}
};
实际上string后面有一个’\0’,你多加了
不需要加空字符也是可以的
请问
if(isPos && ret - 1 >= INT32_MAX) return INT32_MIN;
是什么意思isPos是用来判断这个数是否为负数,isPos->true表示为负数 && ret-1 >= INT32_MAX 只有一种情况就是当它为负数的最大值的时候 也就是说他的补码都是1 ,这时候-1的话会溢出,则返回最大整数值
INT32_MAX是啥意思?
[HTML_REMOVED]同问[HTML_REMOVED]INT32_MAX[^1],=特别-想[HTML_REMOVED]知道,
ret = ret * 10 + s[i] - ‘0’; 请问这句是什么意思?
这个就是把字符串逐个表示成整形的意思,减的那个‘0’是为了把当前的字符转换成整数
谢谢
为啥 *10
个十百千万,向上移动
tql
数字在范围内,是否有可能导致下标越界?
我错了,有 ‘\0’ 忘了
感谢,那个long 真妙,我之前用sum是否小于0来判断的,但是负数跟整数的最大值是不一样的,稀里糊涂地过去了
class Solution {
public:
int strToInt(string str) {
int n=str.length();
int i=0;
long long res=0;
bool neg=false;
};
我的做法 哪里有问题
+
和-
符号都要判断;+
和-
号之后,也要给i
加一;while
内的判断应该是反向判断然后break
;