leedcode 第八題 字串轉整數 (atoi)
阿新 • • 發佈:2018-12-13
class Solution { public: int myAtoi(string str) { int FirstIs=0; string result; int stop; int Num; for( int i=0;i<str.length();i++){ char NowChar = str[i]; if( NowChar == ' ') //空格字元都不儲存 continue; result.push_back(NowChar); if (!result.empty()){ //首字母判斷 stop = i+1; if ( isdigit(result[0])) //首字元數字 { stop = i; FirstIs= 1; } if ( result[0] == '-') //首字元‘-’ { FirstIs= 2; } if ( result[0] == '+') //首字元‘+’ { FirstIs= 3; } break; } } switch(FirstIs){ case 0: return 0; default: Num = StringProcess(str,stop,FirstIs); return Num; } } public: int StringProcess(string input, int start, int Symbol){ int Num = 0; bool Spill = false; for (int i =start; i<input.length(); i++){ char NowChar = input[i]; if( !isdigit(NowChar) ) //數字斷開 { break; } int pop = NowChar - '0'; //數字字元變數字 if (Num > INT_MAX/10 || (Num == INT_MAX / 10 && pop > 7)) { Spill = true; Num = pow(2,31)-1; break; } Num = Num*10 + pop; } if (Symbol == 2 && !Spill) //是負數,沒超 Num =- Num; if (Symbol == 2 && Spill) //是負數,超了 Num =-pow(2,31); return Num; } }; string stringToString(string input) { assert(input.length() >= 2); string result; for (int i = 1; i < input.length() -1; i++) { char currentChar = input[i]; if (input[i] == '\\') { char nextChar = input[i+1]; switch (nextChar) { case '\"': result.push_back('\"'); break; case '/' : result.push_back('/'); break; case '\\': result.push_back('\\'); break; case 'b' : result.push_back('\b'); break; case 'f' : result.push_back('\f'); break; case 'r' : result.push_back('\r'); break; case 'n' : result.push_back('\n'); break; case 't' : result.push_back('\t'); break; default: break; } i++; } else { result.push_back(currentChar); } } return result; } int main() { string line; while (getline(cin, line)) { string str = stringToString(line); int ret = Solution().myAtoi(str); string out = to_string(ret); cout << out << endl; } return 0; }