字符串转换成整数(微软面试)
要注意以下几点:
一,通过一个全局变量标记传入的指针是否为NULL或者是否含有非法字符或者是否造成int溢出。
二,需要判断是否以+号或者-号开头。
三,在函数内部用long long保存结果,如果有溢出,则结果为0。
四,最后,用static_cast强制转换成int。
#include <cstring> #include <iostream> #include <limits> using namespace std; enum Status { Valid = 0, Invalid }; int status = Invalid; // 状态初始化 int atoi(const char* str) { int length, i; bool positive = true; long long ret = 0; if (str != NULL) // 判断NULL { length = strlen(str); i = 0; if (str[i] == '+') // 判断正负符号 { i++; } else if (str[i] == '-') { positive = false; i++; } while (i < length) { if (str[i] >= '0' && str[i] <= '9') // 是否含有非法字符 { ret = ret * 10 + str[i] - '0'; if (ret > std::numeric_limits<int>::max()) // 判断溢出 { ret = 0; break; } i++; } else { ret = 0; break; } } if (i == length) // 转换过程一切顺利 { status = Valid; if (!positive) { ret = 0 - ret; } } } return static_cast<int>(ret); // 将long long转换成int,返回结果 } int main() { char str[255]; while(cin.getline(str,255)) { int res=atoi(str); cout<<res<<endl; } return 0; }
每天明白一点知识