leetcode之String to Integer (atoi)
2015-04-15 18:59
239 查看
String to Integer (atoi)
Total Accepted: 43539 TotalSubmissions: 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;
}
相关文章推荐
- leetcode 日经贴,Cpp code -String to Integer (atoi)
- leetcode: String to Integer (atoi)
- LeetCode String to Integer (atoi)
- leetcode:String to Integer (atoi)
- 刷leetcode:String to Integer (atoi)
- 【LeetCode笔记】String to Integer (atoi)
- [Leetcode] 8. String to Integer (atoi)
- 【leetcode】String to Integer (atoi)
- Leetcode 08 String to Integer (atoi)(实现c++atoi即字符串转数字的功能)
- LeetCode 8 String to Integer (atoi)
- Java [leetcode 8] String to Integer (atoi)
- 【leetcode】String to Integer (atoi)
- [LeetCode][8]String to Integer (atoi)解析与模仿Java源码实现 -Java实现
- LeetCode (8): String to Integer (atoi)
- LeetCode 8. String to Integer (atoi)(字符串转整数)
- LeetCode (8)String to Integer(atoi)
- [LeetCode]-algorithms-String to Integer (atoi)
- LeetCode-String to Integer (atoi)
- [LeetCode][Java] String to Integer (atoi)
- LeetCode 8 String to Integer (atoi)