[算法练习]实现itoa,atoi

来源:互联网 发布:网络舆情队伍建设 编辑:程序博客网 时间:2024/06/07 19:26
int my_itoa(int val, char* buf){    char *p2;    unsigned int a;        //every digit    int len;    char *p1;            //start of the digit char    char temp;    unsigned int u;    if(buf==NULL)    {         return 0;    }    p2 = buf;    if (val < 0)    {if(val == 0x80000000){    char *num = "-2147483648";    for(i=0;i<12;i++)    {buf[i] = *num++;       }    return 11;}        *p2++ = '-';        val = 0 - val;    }    u = (unsigned int)val;    p1 = p2;    do    {        a = u % 10;        u /= 10;        *p2++ = a + '0';    } while (u > 0);    len = (int)(p2 - buf);    *p2-- = 0;    //swap    do    {        temp = *p2;        *p2 = *p1;        *p1 = temp;        --p2;        ++p1;    } while (p1 < p2);    return len;}


#define MAX ((int)0x7FFFFFFF)//整数最大32位都是1#define MIN ((int)0x80000000)//最大+1就是最小int my_atoi(const char * str){     bool negative=false;     unsigned long result=0;     if(str==NULL)         return 0;     while(*str==' ')         str++;     if(*str=='-')     {         negative=true;         str++;     }     else if(*str=='+')         str++;     if(*str<'0'||*str>'9')         return 0;     while(*str>='0' && *str<='9')     {         result=result*10+*str-'0'; //小于最小值 ||大于最大值         if((negative && result>MAX + 1) || (!negative &&  result>MAX))         {      //溢出检测             return 0;         }          str++;     }     //负数处理     if(negative)         result *= -1;     return (int)result; }

我自己实现的:

int aatoi(const char * str) { if(!str)return 0; __int64 test=+0; char sign=0 ; if( ( str[0]=='-' ?--sign:( str[0]=='+'?++sign:sign++ ) ) ) str++; while('0'<= *str && *str <= '9') { test = test*10 + (*str++ - '0'); if(test*sign> 2147483646) return 2147483647;else if(test*sign< -2147483647) return -2147483648; } return int(test)*sign; } 

#define INT_MAX (2147483647)#define INT_MIN (-2147483648)int _atoi(const char *str){if(NULL == str) return 0;unsigned int result = 0;int sign = 1;if(*str == '-' || *str == '+'){if(*str == '-')sign = -1;str++;}while ('0' <= *str && *str <= '9'){unsigned int digit = *str - '0';if((result >INT_MAX / 10) || (sign > 0 ? (result == INT_MAX / 10 && digit > INT_MAX %10):(result == ((unsigned int)INT_MAX + 1) / 10 && digit > (((unsigned int)(INT_MAX + 1) % 10))))){return sign > 0 ? INT_MAX : INT_MIN;}result = result * 10 + digit;str++;}return ((int)result) * sign;}

char* _iota(int num){static char str[MAX_PATH] = {0};int isNeg = num;if(isNeg<0)num = -num;int i = 0;do{str[i++] = num % 10 + '0';num = num / 10;} while (num>0);if(isNeg<0)str[i++] = '-';str[i] = '\0';Reverse(str,_strlen(str));return str;}

void Reverse(char *str,int len){if(NULL == str  || len <= 1)return;char strtemp = *str;*str = *(str + len - 1);*(str + len - 1) = strtemp;Reverse(str+1,len-2);}
size_t _strlen(char *str){<span style="white-space:pre"></span>return (NULL == str || *str == '\0') ? 0 : _strlen(str+1) + 1;}


0 0
原创粉丝点击