JZ-C-49

劍指offer第四十九題:把字符串轉換爲整數ios

  1 //============================================================================
  2 // Name        : JZ-C-49.cpp
  3 // Author      : Laughing_Lz
  4 // Version     :
  5 // Copyright   : All Right Reserved
  6 // Description : 把字符串轉換爲整數
  7 //============================================================================
  8 
  9 #include <iostream>
 10 #include <stdio.h>
 11 #include <stdlib.h>
 12 using namespace std;
 13 
 14 long long StrToIntCore(const char* str, bool minus);
 15 
 16 enum Status {
 17     kValid = 0, kInvalid //此時kInvalid爲1,若是沒有定義enum變量的需求,枚舉變量的值能夠省略。在以上形式下,第一個值默認值爲0,如下各個分別爲上一個值加1。
 18 };
 19 int g_nStatus = kValid;//定義全局變量,反映輸入是否合法
 20 
 21 int StrToInt(const char* str) {
 22     g_nStatus = kInvalid;//初始爲1:不合法
 23     long long num = 0;//用long long型存儲轉換的str,實際返回的則是int型★
 24 
 25     if (str != NULL && *str != '\0') {//考慮空指針NULL或字符串爲空"",函數直接返回0,且全局變量g_nStatus爲1,不合法
 26         bool minus = false;//考慮正負
 27         if (*str == '+')
 28             str++;
 29         else if (*str == '-') {
 30             str++;
 31             minus = true;
 32         }
 33 
 34         if (*str != '\0') {
 35             num = StrToIntCore(str, minus);
 36         }
 37     }
 38 
 39     return (int) num;//將long long型num轉爲int
 40 }
 41 
 42 long long StrToIntCore(const char* digit, bool minus) {
 43     long long num = 0;
 44 
 45     while (*digit != '\0') {
 46         if (*digit >= '0' && *digit <= '9') {
 47             int flag = minus ? -1 : 1;
 48             num = num * 10 + flag * (*digit - '0');
 49             //考慮溢出
 50             if ((!minus && num > 0x7FFFFFFF) //int所能表示的最大正整數
 51             || (minus && num < (signed int) 0x80000000)) { //int所能表示的最小負整數
 52                 num = 0;
 53                 break;
 54             }
 55 
 56             digit++;
 57         } else {
 58             num = 0;
 59             break;
 60         }
 61     }
 62 
 63     if (*digit == '\0') {
 64         g_nStatus = kValid;
 65     }
 66 
 67     return num;
 68 }
 69 
 70 // ====================測試代碼====================
 71 void Test(char* string) {
 72     int result = StrToInt(string);
 73     if (result == 0 && g_nStatus == kInvalid)
 74         printf("the input %s is invalid.\n", string);
 75     else
 76         printf("number for %s is: %d.\n", string, result);
 77 }
 78 
 79 int main(int argc, char** argv) {
 80     Test(NULL);
 81 
 82     Test("");
 83 
 84     Test("123");
 85 
 86     Test("+123");
 87 
 88     Test("-123");
 89 
 90     Test("1a33");
 91 
 92     Test("+0");
 93 
 94     Test("-0");
 95 
 96     //有效的最大正整數, 0x7FFFFFFF
 97     Test("+2147483647");
 98 
 99     Test("-2147483647");
100 
101     Test("+2147483648");
102 
103     //有效的最小負整數, 0x80000000
104     Test("-2147483648");
105 
106     Test("+2147483649");
107 
108     Test("-2147483649");
109 
110     Test("+");
111 
112     Test("-");
113 
114     return 0;
115 }
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息