zoukankan      html  css  js  c++  java
  • String to Integer (atoi)

    这题写的好惨啊,各种情况

    1、丢弃前面空白和数字后面东西

    2、数字是会连续输入的或者是和符号一起输出的,中间有其他的字符都会视为无效,数字前有其他字符也会视为无效。

    3、0777视为777的,注意整数溢出。

     1 class Solution {
     2 public:
     3     int myAtoi(string str) {
     4        if(str.empty()) return 0;
     5        string::iterator first=str.begin(),end=str.end();
     6        int n=0,op_tag=0,num_tag=0,space_tag=0;
     7        long long max=2147483647,num=0;
     8        char op='+';
     9       while(first!=end)
    10       {
    11       while(*first==' '){first++;space_tag=1;}
    12            if(*first=='+'||*first=='-' ) 
    13             {
    14                 if(op_tag==0)
    15                 {
    16                     op=*first;
    17                      op_tag=1;
    18                      first++;
    19                     
    20                 }
    21                 else return 0;
    22             } 
    23             if((first != end) &&isdigit(*first)) 
    24                           {
    25                             while((first != end) && isdigit(*first))
    26                             {
    27                              n=*first-'0';
    28                              num=num*10+n;
    29                              first++;
    30                              num_tag=1;
    31                               if(num > max)break;
    32                             }
    33                           }
    34             else break;
    35            if(num_tag==1||space_tag==1||op_tag==1) break;
    36              first++; 
    37       }
    38   if(op=='-')
    39   {
    40     if(num >(max+1))num =-(max+1);
    41     else num=-num;
    42    }
    43   else if(op== '+') 
    44     {
    45        if(num>max) num=max;
    46     }
    47        return num; 
    48        
    49     }
    50 };
    如果把指针改为下标会简练一些,下面是网上的思路
     1 int atoi(const char *str) {
     2     int sign = 1, base = 0, i = 0;
     3     while (str[i] == ' ') { i++; }
     4     if (str[i] == '-' || str[i] == '+') {
     5         sign = 1 - 2 * (str[i++] == '-'); 
     6     }
     7     while (str[i] >= '0' && str[i] <= '9') {
     8         if (base >  INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) {
     9             if (sign == 1) return INT_MAX;
    10             else return INT_MIN;
    11         }
    12         base  = 10 * base + (str[i++] - '0');
    13     }
    14     return base * sign;
    15 }
  • 相关阅读:
    PyCharm 3.4注册码
    监控Oracle索引是否被启用
    Oracle execute plan 原理分析与实例分享(转)
    6 个重构方法可帮你提升代码质量(转载)
    跟我一起学Oracle 11g【2】----用户管理(转载)
    notecore设置linux/Unix系统文件权限
    Unicode特殊字符的坑
    net多线程
    走过的HttpClient坑
    Postgre备份还原
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/4977832.html
Copyright © 2011-2022 走看看