您的位置:首页 > Web前端

剑指offer---把字符串转换为整数(49)

2017-12-02 20:55 309 查看
剑指offer中这个题目没有要考虑进制的问题,也没有让考虑例如:字符串为“wes1234jing”之类的问题,凡是除了‘+’、‘-’、以及数字字符之外的字符都为不合法字符。然而在实际情况中肯定要考虑到进制以及更多的问题。因为在面试过程当中,时间比较短,所以这些问题面试官会规避,单纯的考察你的逻辑思维以及编程的风格。

#include <iostream>
#include <string>
#include <string.h>
using namespace std;

bool tmp = false;

long long StrtoIntCore(const char* str,int flg)
{
long long num = 0;
while(*str != '\0')
{
if(isdigit(*str))
{
num = num*10 + flg*(*str - '0');
//有溢出
if( flg && num>0x7FFFFFFF || !flg && num < (signed int)0x80000000)
{
num = 0;
break;
}
str++;
}
else       //一旦有不是数字字符的字符直接认为是输入有误
{
num = 0;
break;
}
}
if(*str == '\0')
{
//如果到了这一步,说明输入的字符串合法。所以将标记改为true;
tmp = true;
}
return num;
}
int StrtoInt(const char* str)
{
long long num = 0;
//传入的字符串不为空,或者不是传入了“\0”
if(str != NULL && *str != '\0')
{
int myflg = 1;
if(*str == '+')
str++;
else if(*str == '-')
{
myflg = -1;
str++;
}
if(*str != '\0')     //防止输入的只是一个正负号。
{
num = StrtoIntCore(str,myflg);
}
}
return int(num);
}

int main()
{
char* str = "+123";
char* str1 = "-123";
char* str2 = "+";
char* str3 = "-";
char* str4 = "";
char* str5 = NULL;
char* str6 = "+113wd";
char* str7 = "0";

int value = StrtoInt(str7);
if(tmp)
{
cout<<value<<endl;
}
else
{
cout<<value<<endl;
cout<<"输入字符不合法"<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息