C/C++ 中有一个函数 atoi,它可以将一个字符串转换为 32-bit 的有符号整数,请实现 myAtoi 函数完成同样的功能。
1.忽略前面的空白字符。
2.检查下一个字符是否是 ‘+’ 和 ‘-’,如果没有出现,默认为正数。
3.读取下一个字符,直到遇到非数字字符,或者到字符串的末尾。
4.将读入的数字字符转换为对应的整数 (i.e. “123” -> 123, “0023” -> 23). 如果没有读取任何一个数字,则结果为 0.
5.如果超出了整数的表示范围 [-231, 231 - 1], 则将小于 -231 的值 转换为 -231,大于 231 - 1 的值转换为 231 - 1.
int myAtoi(const char* s);
#include<stdio.h>
int myAtoi(const char* s) {
int flag = 1;
while (!(*s >= '0' && *s <='9' || *s == '+' || *s == '-') )
{
s++;
}
if (*s == '-') {
flag = 0;
s++;
}
if (*s == '+') {
s++;
}
while (*s == '0')
{
s++;
}
const char* last = s;
while (*last>='0' && *last <='9')
{
last++;
}
last--;
unsigned sum = 0;
int ten = 1;
unsigned positive_max = 0x7fffffff;
unsigned negtive_max = 0x80000000;
if (flag == 0)
{
while (true) {
sum = sum + ((*last) - '0') * ten;
ten *= 10;
if (last == s) {
break;
}
if (sum > negtive_max) {
return 0x80000000;
}
last--;
}
return -int(sum);
}
else
{
while (true) {
sum = sum + ((*last) - '0') * ten;
ten *= 10;
if (last == s) {
break;
}
if (sum > positive_max) {
return 0x7fffffff;
}
last--;
}
return int(sum);
}
}
int main(void) {
char str[] = "000213";
int result = myAtoi(str);
printf("%d", result);
return 0;
}