题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
思路:
考虑+、-、空格、非数字字符,以及溢出问题
代码:
#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;
}
};