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

    这种题就是考你考虑了多少些情况,第一次没有考虑到的情况有:+-号,超出int范围,多数次过

     1 class Solution {
     2 public:
     3     int atoi(const char *str) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         bool showed = false;
     7         int s = 0;
     8         bool negtive = false;
     9         for (int i = 0; *(str+i) != '\0'; i++) {
    10             if (!showed) {
    11                 if (*(str+i) == ' ') continue;
    12                 if (*(str+i) >= '0' && *(str+i) <= '9') {
    13                     showed = true;
    14                     s = (int)(*(str+i) - '0');
    15                 }
    16                 else if (*(str+i) == '-') {
    17                     showed = true;
    18                     negtive = true;
    19                 }
    20                 else if (*(str+i) == '+') showed = true;
    21                 else return 0;
    22             }
    23             else {
    24                 if (*(str+i) == ' ') return negtive? -s : s;
    25                 if (*(str+i) >= '0' && *(str+i) <= '9') {
    26                     if (s > (INT_MAX - (int)(*(str+i)-'0'))/10)
    27                         return negtive? INT_MIN : INT_MAX;
    28                     s = s*10 + (int)(*(str+i) - '0');
    29                 }
    30                 else return negtive? -s : s;
    31             }
    32         }
    33         return negtive? -s : s;
    34     }
    35 };

     后来写了个更加精简的代码

     1 class Solution {
     2 public:
     3     int atoi(const char *str) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         while (isspace(*str)) str++;
     7         int ret = 0;
     8         bool isNeg = false;
     9         if (*str == '+') str++;
    10         if (*str == '-') {
    11             isNeg = !isNeg;
    12             str++;
    13         }
    14         while (isdigit(*str)) {
    15             if (ret > (INT_MAX - int(*str-'0'))/10) return isNeg? INT_MIN : INT_MAX;
    16             ret = ret*10+int(*str-'0');
    17             str++;
    18         }
    19         return isNeg? -ret : ret;
    20     }
    21 };
  • 相关阅读:
    BZOJ1511: [POI2006]OKR-Periods of Words
    BZOJ1009: [HNOI2008]GT考试
    BZOJ1355: [Baltic2009]Radio Transmission
    BZOJ1415: [Noi2005]聪聪和可可
    BZOJ1004: [HNOI2008]Cards
    UVA11077 Find the Permutations
    LA3641 Leonardo's Notebook
    UVA10294 Arif in Dhaka
    UVA11762 Race to 1
    UVA11427 Expect the Expected
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3033598.html
Copyright © 2011-2022 走看看