每周一道算法题(五)
2017-04-15 本文已影响575人
CrazySteven
本周的算法题就是重复造轮子,难度水平‘中’
题目:将一个字符串转成int整型
需要注意的是:
- 忽略字符串起始的空格,注意数字前面可能会有“+”“-”号;
- 忽略所有跟在数字后面的奇怪的字符;
- 如果起始字符跟数字不想关,或者是空字符串,或者是全是空格的字符串,那么不用转换,返回0;
- 超出范围的数字返回宏'INT_MAX'(2147483647)或者宏'INT_MIN'(-2147483648)
直接上代码(假设传入的字符串为str)
//sign为是否有负号,stop为是否有正号,i为遍历下标
int sign = 0,stop = 0,i = 0;
//result为结果
long result = 0;
//忽略前面的空格
while(str[i] == ' ') {
i++
}
for (int i = 0; i<strlen(str); i++) {
//如果字符为数字
if (str[i] >= '0' && str[i] <= '9') {
result = result*10 + (str[i] - '0');
if (result > INT_MAX) {
break;
}
//如果字符是负号,并且之前没有负号
}else if (str[i] == '-' && sign == 0) {
sign = 1;
//如果字符是正号,并且之前没有正号
}else if (str[i] == '+' && stop == 0) {
stop = 1;
//如果字符是空格,并且前面没有数字
}else {
break;
}
//如果有正号也有负号
if (sign && stop) {
return 0;
}
}
if (sign) {
result = -result;
}
if (result >= INT_MAX) {
return INT_MAX;
}else if (result <= INT_MIN) {
return INT_MIN;
}
return (int)result;
当然,C有简单的atoi等函数,或者使用上周算法题出现过的atol函数来解决溢出问题,轮子造好了,老司机开车吧。。。