zoukankan      html  css  js  c++  java
  • 字符串转换为整数”123“->123

    字符串转换为整数”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; }



  • 相关阅读:
    团体程序设计天梯赛PTA L1-006连续因子
    团体程序设计天梯赛PTA L1-002打印沙漏
    spring学习3-配置文件
    markdown基本用法
    java贪食蛇小游戏
    在idea中使用lombook插件
    ajax初体验hello_ajax
    idea,自定义骨架的增加与删除
    idea 2017,2018,2019下载与破解
    idea关联mysql数据库失败,时区错误,数据库驱动配置
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5166944.html
Copyright © 2011-2022 走看看