zoukankan      html  css  js  c++  java
  • 标准库函数atoi的实现

    标准库函数atoi用于将字符串类型的数据转换为整形数据:在转换过程中要考虑空指针、空字符串""、正负号,溢出等情况

    这里是将字符串str转换为32位整型,其正数的最值为0x7FFFFFFF,负数的最小值为0x80000000(可参考有符号类型的最小负数的补码的由来),通过这两个值来判断是上溢还是下溢,此外,用一个全局变量来表明是否是非法输入的问题。

    代码如下:(vs2010调试正确)

     1 //实现atoi_32函数
     2 //正数数的最大值为0x7FFFFFFF,最小值为0x80000000,考虑数字会溢出的情况
     3 #include <stdio.h>
     4 #include <stdlib.h>
     5 #include <ctype.h>
     6 
     7 enum {kValid = 0,kInvalid};
     8 int g_nStatus = kValid;  //全局变量用于判断是非法输入还是字符串为空
     9 
    10 long long StrToInt(const char *s,int sign)
    11 {
    12     long long num = 0;
    13     while(*s != ''){
    14         if(!isdigit(*s)){
    15             g_nStatus = kInvalid;  //表示非法输入
    16             num = 0;
    17             break;
    18         }
    19         num = num * 10 + *s - '0';
    20         if(sign > 0 && sign * num > 0x7FFFFFFF || 
    21             sign < 0 && sign * num < (signed int)0x80000000){  //注意这里的类型提升,因此要强制转换
    22             num = 0;
    23             break;
    24         }
    25         s++;
    26     }
    27     return sign * num;
    28 }
    29 int atoi_32(const char *s)
    30 {
    31     long long num;
    32     int sign;
    33     sign = 1;
    34     
    35     if(s == NULL || *s == ''){
    36         return 0;
    37     }
    38     if(*s == '+')
    39         ++s;
    40     else if (*s == '-'){
    41         ++s;
    42         sign = -1;
    43     }
    44     if (*s == ''){
    45         g_nStatus = kInvalid;  //表示非法输入
    46         return 0;
    47     }
    48     else
    49         num = StrToInt(s,sign);
    50 
    51     return (int)num;
    52 }
    53 
    54 int main()
    55 {
    56     char s[1024];
    57     gets(s);
    58     printf("%d
    ",atoi_32(s));
    59     system("pause");
    60     return 0;
    61 }

     PS:参考《剑指offer》

    只为训练自己,时刻锤炼一个程序员最基本的技能!
  • 相关阅读:
    重建索引报错-python数据分析
    机器学习实战1-2.1 KNN改进约会网站的配对效果 datingTestSet2.txt 下载方法
    机器学习实战1-1 KNN电影分类遇到的问题
    权限掩码umask详解
    spark配置(7)--on yarn配置
    spark配置(6)-独立应用程序
    spark配置(5)-独立应用程序
    spark配置(4)-----Spark Streaming
    spark配置(3)
    spark配置(2)
  • 原文地址:https://www.cnblogs.com/coding-wtf/p/5790214.html
Copyright © 2011-2022 走看看