1. 题目描述
题目链接:把字符串转换成整数
2. 解题思路
用一个 index
全程记录字符串下标。按照题目要求的点,先排除前导空格,再检查符号,最后转换数字,遇到非数字即停止转换,直接输出前面部分,最后注意边界等情况。一个遍历即可解决。
算法如下:
(1)去掉无用的前导空格
(2)第一个非空字符为 +
或者 -
号时,作为该整数的正负号,如果没有符号,默认为正数
(3)判断整数的有效部分,确定符号位之后,与之后面尽可能多的连续数字组合起来成为有效整数数字,如果没有有效的整数部分,那么直接返回 0
(4)将字符串前面的整数部分取出,后面可能会存在存在多余的字符(字母,符号,空格等),这些字符可以被忽略,它们对于函数不应该造成影响
注意:
(1)将字符转换为数字的方法:c - '0'
(2)求和公式:sum = sum * 10 + (c - '0')
3. 代码实现
代码示例
class Solution {
public:
int StrToInt(string str) {
// 求和公式:sum = sum * 10 + (c - '0')
int index = 0; //遍历字符串下标
int sign = 1; //符号位
long long sum = 0; //存放整数
//排除前导空格(也可以不写,因为题目没有说有空格)
while (index < str.size())
{
if (str[index] != ' ') //如果第一个字符不是空格,那么直接退出
break;
index++;
}
//判断正负数的情况
if (str[index] == '-') {
sign = -1;
index++;
}
else if (str[index] == '+') {
index++;
}
//开始遍历
while (index < str.size())
{
if (str[index] >= '0' && str[index] <= '9') { //如果字符合法,那么直接累加
sum = sum * 10 + (str[index] - '0');
index++;
}
else { //否则直接返回0
sum = 0;
break;
}
}
sum *= sign; //最后乘以符号位
return sum;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/80845.html