频道栏目
首页 > 资讯 > Java > 正文

字符串转换为整数”123“-)123

14-08-09        来源:[db:作者]  
收藏   我要投稿

字符串转换为整数”123“->123

题目描述:
输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。
给定函数原型 int StrToInt(const char *str) ,实现字符串转换成整数的功能,不能使用库函数atoi。
题目分析:
将字符串正确转化为整数步骤
①当扫描第一个字符‘1’时候,由于为第一位,所以直接得到数字1
②当扫描第二个字符‘2’时候,1*10+2 = 12
③继续扫描字符‘3’时候,12*10+3=123
所以就是n = n * 10 + c;
易错处:
1)不能为空指针,否则访问空指针时程序会崩溃if(str == NULL)return 0;
2)要考虑正负符号加入sign标记
3)要考虑非法字符,例如空格之类的while(isspace(*str)) ++str 还需要检测当为数字时,我们才开始转化
4)整型的溢出,如果输入一个很长很长的字符串,可能照成整型的溢出方法一、可以将n定义为long long型;方法二、利用定义MAX_INT 和 MIN_INT(对0右移取反),通过比较n和MAX_INT/10的大小
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
参考代码:

int StrToInt(const char *str)
{
    //对0取反再右移一位
    static const int MAX_INT = (int)((unsigned)~0 >> 1);
    static const int MIN_INT = -(int)((unsigned)~0 >> 1)-1;
    unsigned int n = 0;

    //判断是否为空
    if(str == NULL)
        return 0;
    //处理空格
    while(isspace(*str))
        ++str;

    //处理正负
    int sign = 1;
    if(*str == '+' || *str == '-')
    {
        if(*str == '-')
            sign = -1;
        ++str;
    }

    //确定数字后才开始转化
    while(isdigit(*str))
    {
        //处理溢出
        int c = *str - '0';
        if(sign > 0 && (n > MAX_INT/10 || (n == MAX_INT/10 && c > MAX_INT%10)))
        {
            n = MAX_INT;
            break;
        }
        else if(sign < 0 && (n > (unsigned)MIN_INT/10 || (n == (unsigned)MIN_INT/10 && c > (unsigned)MIN_INT%10)))
        {
            N = MIN_INT;
            break;
        }

        n = n * 10 + c;
        ++str;
    }
    return sign > 0 ? n : -n;
}


相关TAG标签
上一篇:VC++玩转Native Wifi API 3---GOTO在释放资源时的作用
下一篇:poj3080Blue Jeans
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站