字符串转换为整型

    xiaoxiao2021-03-25  118

       要想让字符串转换为整型大家可能觉得很简单,直接一个循环,然后num=num*10+(*str-'0');就OK,但其实并不是这样,我们要考虑它的多种可能会产生的情况,如下

    “12345”正常情况,可以用上式循环的到想要的结果“+12345”和“-12345”,带有符号位的情况“abcd1234”,带有特殊字符的情况“”,字符串内部什么都没有的情况字符串不存在的情况“1234567890012345567”,值远远超过int的最大范围的情况

    #include<stdio.h> #include<assert.h> #include<ctype.h> #include<limits.h> enum State { INVALID,//0 VALID,//1 }; enum State state = INVALID; int my_atoi(char *str) { int flag = 1;//标志位,标志是正数还是负数 long long int ret = 0; assert(NULL != str); if(*str == '+') { ++str; } if(*str == '-') { flag = -1; ++str; } if(*str == '\0') { return 0; } while(*str) { if(isdigit(*str)) { ret = ret*10+(*str-'0')*flag; if(ret>INT_MAX||ret<INT_MIN) { return (int)ret; } ++str; } else { break; } } if(*str == '\0') { state = VALID; } return ret; } int main() { int ret = my_atoi("123"); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-7331.html

    最新回复(0)