目录
题目描述
请你来实现一个 myAtoi(string s)
函数,使其能将字符串转换成一个 32 位有符号整数。
函数 myAtoi(string s)
的算法如下:
- 空格:读入字符串并丢弃无用的前导空格(
" "
) - 符号:检查下一个字符(假设还未到字符末尾)为
'-'
还是'+'
。如果两者都不存在,则假定结果为正。 - 转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
- 舍入:如果整数数超过 32 位有符号整数范围
[−231, 231 − 1]
,需要截断这个整数,使其保持在这个范围内。具体来说,小于−231
的整数应该被舍入为−231
,大于231 − 1
的整数应该被舍入为231 − 1
。
返回整数作为最终结果。
解答(c语言)
int myAtoi(char* s) {
size_t len = strlen(s);
size_t index = 0;
// 丢弃无用的前导空格
while (s[index] == ' ') {
index++;
}
// 判断第一个字符是否为符号,默认正数
int symbol = 1;
if (s[index] == '-') {
symbol = -1;
index++;
} else if (s[index] == '+') {
symbol = 1;
index++;
} else if ('0' <= s[index] && s[index] <= '9') {
symbol = 1;
} else {
return 0;
}
// 继续读取字符转化成数字
double ret = 0;
while ('0' <= s[index] && s[index] <= '9') {
ret = ret * 10 + s[index] - '0';
index++;
}
ret = ret * symbol;
// 舍入
long maxValue = pow(2, 31);
if (ret < -maxValue) {
ret = -maxValue;
} else if (ret > maxValue - 1) {
ret = maxValue - 1;
}
return ret;
}