您的位置:首页 > 其它

leetcode之String to Integer (atoi)

2015-04-15 18:59 239 查看


String to Integer (atoi)

Total Accepted: 43539 Total
Submissions: 327758My Submissions

Question
Solution

Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
首先分情况讨论。
1、字符串开始是空格
2、字符串中数字开始之前有符号+或者-。
3、字符串中以非正负符号,非数字,非空格开头,这是不合法的,返回0.例如“ jdfsdf”。
4、字符串中数字中间含有非符号数据“123j356”,则返回123.
5、字符串中数字超过Int表示范围。最难处理的一部分

代码如下:
// test8StringToInt.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include "string"

using std::string;

int myAtoi(string str);

int theNum(char a);

int _tmain(int argc, _TCHAR* argv[])

{

int res = myAtoi(" -11009215950h");

return 0;

}

int myAtoi(string str)

{

long int sum = 0;

int temp = 0;

int length = str.size();

int signal = 0;

int i = 0;

while (str[i] == ' ') //过滤所有的空格

i++;
//读取正负符号,没有符号则还是0,只有signal为1时候是负数。

if (str[i] == '-')

{

signal = 1;

i++;

}

else if (str[i] == '+')

{

signal = 2;

i++;

}
//读取字符串

for (i; i < length; i++)

{
if (sum>0 && isdigit(str[i]) == false)//处理字符串中数字中间含有不合法字符,如“123jk345”的情况

{

if (signal == 1)

return -1 * sum;

return sum;

}

if (isdigit(str[i]) == false)//处理不合法开头的情况,例如"-jjfdkf"

return 0;

else

{

temp=theNum(str[i]);

sum = sum * 10 + temp;

//开始判断是否越界

if (sum>=214748364 && i+1<length && isdigit(str[i+1]))

{

if (i + 2 < length && isdigit(str[i + 2]))

{

if (signal !=1)

sum = 2147483647;

else

{

sum = 2147483648;

}

break;

}

else if (signal != 1)

{

if (theNum(str[i + 1])>7)

{

sum = 2147483647;

break;

}

else if (sum >= 214748365 && theNum(str[i + 1]) >= 0)

{

sum = 2147483647;

break;

}

}

else if (signal == 1)

{

if (theNum(str[i + 1])>7 )

{

sum = 2147483648;

break;

}

else if (sum >= 214748365 && theNum(str[i + 1]) >= 0)

{

sum = 2147483648;

break;

}

}

}

// 判断是否越界结束

}

}

if (signal == 1)

return -1 * sum;

return sum;

}

int theNum(char a)

{

int temp = 0;

switch (a)

{

case '1':temp = 1; break;

case '2':temp = 2; break;

case '3':temp = 3; break;

case '4':temp = 4; break;

case '5':temp = 5; break;

case '6':temp = 6; break;

case '7':temp = 7; break;

case '8':temp = 8; break;

case '9':temp = 9; break;

case '0':temp = 0; break;

default:

temp = -1;

break;

}

return temp;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: