码迷,mamicode.com
首页 > 其他好文 > 详细

atoi&itoa

时间:2015-08-29 12:36:40      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

char* itoa(int num,char*str,int radix)
{/*索引表*/
    char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    unsigned unum;/*中间变量*/
    int i=0,j,k;
    /*确定unum的值*/
    if(radix==10&&num<0)/*十进制负数*/
    {
        unum=(unsigned)-num;
        str[i++]=-;
    }
    else unum=(unsigned)num;/*其他情况*/
    /*转换*/
    do{
        str[i++]=index[unum%(unsigned)radix];
        unum/=radix;
    }while(unum);
    str[i]=\0;
    /*逆序*/
    if(str[0]==-)
        k=1;/*十进制负数*/
    else 
        k=0;
    char temp;
    for(j=k;j<=(i-1)/2;j++)
    {
        temp=str[j];
        str[j]=str[i-1+k-j];
        str[i-1+k-j]=temp;
    }
    return str;
}

 

class Solution {
public:

    bool isdigit(char c){
        if (c >= 48 && c <= 57)
            return true;
        else
            return false;
    }
    int atoi(string str){
        long long  ans = 0,res=1;
        bool flag = false;
        char c;
        for(int i=0;i < str.size() ;i++){
            c = str[i];
            if(!flag && (c==  || c==\t || c==\r || c==\n) ) continue;
            if(!flag && (c==+ || c==-) ){
                if(c==-) res = -1;
                flag = true;
                continue;
            }
            if(!flag && isdigit(c)){
                flag = true;
            }
            if(!isdigit(c)) break;
            ans = ans * 10 + (c-0);
            //cout<<ans<<‘ ‘<<c<<endl;
            if(ans > INT_MAX ){
                break;
            }
        }
        ans *= res;
        if(ans > INT_MAX) ans = INT_MAX;
        else if (ans < INT_MIN ) ans = INT_MIN;
        return (int)ans;
    }
};

 

atoi&itoa

标签:

原文地址:http://www.cnblogs.com/yxzfscg/p/4768814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!