码迷,mamicode.com
首页 > 其他好文 > 详细

String to Integer (atoi)--LeetCode

时间:2015-04-06 17:22:19      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:c++   leetcode   算法   

这种题的考察重点并不在于问题本身,而是要注意corner case的处理,整数一般有两点,一个是正负符号问题,另一个是整数越界问题。思路比较简单,就是先去掉多余的空格字符,然后读符号(注意正负号都有可能,也有可能没有符号),接下来按顺序读数字,结束条件有三种情况:(1)异常字符出现(按照C语言的标准是把异常字符起的后面全部截去,保留前面的部分作为结果);(2)数字越界(返回最接近的整数);(3)字符串结束。

思路:从头开始查找字符,找打标志位,然后开始计算

#include <iostream>
#include <vector>
#include <string>
#include <limits> 
using namespace std;
/*
这里需要注意三点 一个越界 一个正负数 一个字符串结束 
*/

int StringToInt(string& str)
{
	if(str.length()==0)
		return 0;
	int i;
	int flag=1;
	int result=0;
	int digit;
	for(i=0;i<str.length();i++)
		if(str[i] != ' ')
			break;
	if(str[i]=='+')
		i++;
	if(str[i]=='-')
	{
		flag = 0;
		i++;
	}
	
	for(;i<str.length();i++)
	{
		if(str[i]<'0' || str[i]>'9')
			break;
		digit = str[i]-'0';
		if(flag && (numeric_limits<int>::max()-result*10) <= digit)
			return numeric_limits<int>::max();
		else if(!flag && (numeric_limits<int>::min()+result*10) >= digit*-1)
			return numeric_limits<int>::min();
		result = result*10 + digit;
	}
	return flag == 1? result:-result;
}

int main()
{
	string str("2147483649");
	cout<<StringToInt(str)<<endl;
	return 0;
}


String to Integer (atoi)--LeetCode

标签:c++   leetcode   算法   

原文地址:http://blog.csdn.net/yusiguyuan/article/details/44902789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!