把字符串转换成整数
功能测试:输入的字符字符串表示正数、负数、0;
边界值:最大正整数,最小负整数
特殊输入测试:输入字符串为NULL指针,空字符串、字符串中有非数字字符...
1 class Solution { 2 public: 3 enum Status{kValid = 0,kInvalid}; 4 int g_nStatus = kValid;//标记是否是非法输入 5 int StrToInt(string str) { 6 g_nStatus = kInvalid;////初始标记为非法输入 7 long long num=0;//存出结果的 8 const char* cstr=str.c_str();//变成标准c字符数组,最后一个元素是'\0' 9 //判断是是否是空指针和空字符串 10 if(cstr!=nullptr && *cstr!='\0'){ 11 //先处理符号位 12 int minus=1; 13 if(*cstr=='-'){ 14 minus=-1; 15 cstr++; 16 } 17 else if(*cstr == '+') cstr++; 18 //开始处理其余的位 19 while(*cstr!='\0'){ 20 //注意'\0'==0,‘ ’==32,'0'==48,‘A’==65,‘a’==97字符的比较用的是ascii码 21 if(*cstr>'0' && *cstr<='9'){ 22 g_nStatus = kValid; 23 num = num*10 + (*cstr - '0'); 24 cstr++; 25 //数据溢出 26 //如果是整数,num>int最大的数时;或负数,小于int最小的数时 27 //一个16进制数可以有4位二进制来表示,也就是4bit,那么8位16进制数由32位二进制表示 28 //正好是int型的大小,第一个是7=0111,也即是第一位是0后面全是1 29 if(((minus>0) && (num > 0x7FFFFFFF))||((minus<0) && (num > 0x80000000))){ 30 g_nStatus = kInvalid; 31 num=0; 32 break; 33 } 34 } 35 else{ 36 g_nStatus = kInvalid; 37 num=0; 38 break; 39 } 40 } 41 if(g_nStatus==kValid) num=num*minus; 42 } 43 return (int)num; 44 } 45 };