• 字符串转化为整数


    字符串转化为整数需要注意以下几个问题:

      1.检测非法输入;

      2.空串、空指针;

      3.判断数字的正负;

      4.处理数字的上下溢出。(因为整数是有范围的。


    #include <iostream>

    long long StrToIntCore(const char* digit,bool minus);
    enum Status{kValid = 0, kInvalid};
    int g_nStatus = kValid;   //定义一个全局变量来标志是否遇到非法输入。

    int StrToInt(const char* str){
     g_nStatus = kInvalid;
     long long num = 0;
     if(str != NULL && *str != '\0'){  //检查是否为空指针或者是空串
      bool minus = false;
      if(*str == '-'){        //三个if主要是为了数字的正负,用户可以不必在正数前加+号
       str++;
       minus = true;
      }else if(*str == '+'){
       str++;
      }else if(*str >= '0' && *str <='9')
      {
      }
      if(*str != '\0'){
       num = StrToIntCore(str,minus);
      }
     }
     return (int)num;
    }
    long long StrToIntCore(const char* digit,bool minus){
     long long num = 0;      //注意此处为长整型
     while(*digit != '\0'){
      if(*digit >= '0' && *digit <= '9'){
       int flag = minus?-1:1;
       num = num*10 + flag*(*digit - '0');
       if((!minus && num > 0x7FFFFFFF)||(minus && num < (signed int)0x80000000)){    //检查数字是否超过整型的范围
        num = 0;
        break;
       }
       digit++;
      }
      else{
       num = 0;
       break;
      }
     }
     if(*digit == '\0'){
      g_nStatus = kValid;
     }
     return num;
    }

    int main(){
     char a[]="-1023085839";
     char b[]="99999999999999999999999999999999999999999999";
     char c[]="+520";
     printf("%d\n%d\n%d\n",StrToInt(a),StrToInt(b),StrToInt(c));
     return 0;
    }

  • 相关阅读:
    TCP协议详解-IPv4
    welcome to my cnblog
    怎样解决闭包造成的内存泄漏
    跳转路由后请求失败
    vant grid组件图片加载问题
    3次握手
    res.send()传参----Invalid status code: 1
    堆栈总结
    jQuery实现全选
    phpstudy_pro打开MySQL服务,一闪一闪的
  • 原文地址:https://www.cnblogs.com/guotao/p/2982032.html
Copyright © 2020-2023  润新知