# 題目
把字符串轉換成整數
# 思路
1.功能測試
正數/復數/0
2.邊界值測試
最大的正整數/最小的負整數(數據上下溢出)
3.特殊輸入測試
- 空字符串“”的處理,返回0,設置非法輸入
- 字符串只有符號位的處理,返回0,設置非法輸入
- 輸入的字符串中有非數字字符,返回0,設置非法輸入
# 代碼
#include <iostream> #include <string> using namespace std; // 67:把字符串轉換成整數 class Solution { public: /*全局變量*/ enum {kValid,kInvalid}; // 枚舉元素(kValid=0,kInvalid=1) int g_nStatus = kValid; // 標記是否是非法輸入 /*功能函數*/ int StrToInt(string str) { g_nStatus = kInvalid; // 初始標記為非法輸入 long long num = 0; // 存儲結果 const char* cstr = str.c_str();// 指向字符數組的指針 // 判斷是否是空指針和空字符串"" if( (cstr != NULL) && (*cstr != '\0') ) { // 處理符號位 int minus = 1; if(*cstr == '-') { minus = -1; cstr++; } else if(*cstr == '+') { minus = 1; cstr++; } // 處理其余位 while(*cstr != '\0') { if(*cstr > '0' && *cstr < '9') { // string轉int類型 g_nStatus = kValid; // 標記為合法輸入 num = num*10 + (*cstr -'0'); // string轉換為int類型 cstr++; // 數據上下溢出 if( ((minus>0) && (num > 0x7FFFFFFF)) ||((minus<0) && (num > 0x80000000)) ) { g_nStatus = kInvalid; // 如果溢出,則標記為非法輸入 num = 0; break; } } else { g_nStatus = kInvalid; num = 0; break; } } if(g_nStatus == kValid) num = num * minus; } cout<<(int)num<<endl; return (int)num; } }; int main() { string str = "123"; Solution solution; solution.StrToInt(str); return 0; }