atoi函数实现

 

#include<iostream>
#include<limits>		//整型变量最大最小值
using namespace std;

/* 说简单不简单的字符串转整数题
1、开头空白
2、正负号
3、非数字
4、超过int类型范围
5、'\0'结尾

*/
bool myatoi(const char *str,int *result)
{
	if(!str)	return 0;
	bool positive=true;

	while(*str==' ') str++;
	if(*str=='-')
	{
		positive=false;
		str++;
	}
	else if(*str=='+')
	{
		str++;
	}


	double sum=0;
	int digits=0;
	while(*str!='\0'&&*str>='0'&&*str<='9')
	{
		sum = sum*10 + *str++-'0';
		if(positive&&sum>INT_MAX||(!positive&&(0-sum)<INT_MIN))	return 0;	//超出范围
		digits++;
	}
	if(digits==0)	return 0;		//没有数字
	else
	{
		*result = positive ? (int(sum)):(int(0-sum));
		return 1;
	}
}





void main()
{
	int num;
	if(myatoi("   123",&num)==0)	
        cout<<"error"<<endl; else
        cout<<num<<endl; if(myatoi(" +1ab",&num)==0)
        cout<<"error"<<endl; else
        cout<<num<<endl; if(myatoi(" +11111111111111111111111111",&num)==0)
        cout<<"error"<<endl; else
        cout<<num<<endl; if(myatoi(" 0",&num)==0)
        cout<<"error"<<endl; else
        cout<<num<<endl; }

  

 

posted @ 2014-09-11 22:52  月十日十  Views(205)  Comments(0)    收藏  举报