(剑指Offer)面试题49:把字符串转换为整数
题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
思路:
考虑+、-、空格、非数字字符,以及溢出问题
代码:
#include <iostream> using namespace std; enum Status {kValid=0,kInvalid}; int g_nStatus=kInvalid; long long StrToIntCore(const char* str,bool minus){ long long num=0; int flag=minus?-1:1; while(*str!='\0'){ if(*str>='0' && *str<='9'){ num=num*10+flag*(*str-'0'); if((!minus && num>0x7fffffff) || (minus && (signed int)num<0x80000000)){ num=0; break; } str++; } else{ num=0; break; } } if(*str=='\0') g_nStatus=kValid; return num; } int StrToInt(const char* str){ g_nStatus=kInvalid; long long num=0; bool minus=false; if(str!=NULL && *str!='\0'){ while(*str==' '){ str++; if(str==NULL) return 0; } if(*str=='+') str++; if(*str=='-'){ str++; minus=true; } if(*str!='\0') num=StrToIntCore(str,minus); } return (int)num; } int main() { cout << StrToInt(" -998") << endl; cout << g_nStatus <<endl; Solution s; cout << s.StrToInt("123") << endl; return 0; }
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/1277c681251b4372bdef344468e4f26e?rp=2
AC代码:
class Solution { public: int StrToInt(string str) { long long num=0; bool minus=false; int len=str.length(); if(len==0) return 0; int i=0; while(str[i]==' '){ i++; if(i==len) return 0; } if(str[i]=='+') i++; else if(str[i]=='-'){ minus=true; i++; } int flag; while(i<len){ flag=minus?-1:1; if(str[i]>='0' && str[i]<='9'){ num=num*10+flag*(str[i]-'0'); if((!minus && num>0x7fffffff) || (minus && (signed int)num<0x80000000)){ num=0; break; } i++; } else{ num=0; break; } } return (int)num; } };