/**********************************************************
*name:jae chia *
*purpse:convert the string to interger *
*date:2014/7/23 *
**********************************************************/
/*------------------------------------------------------------------------
* 特殊输入测试:
* 1.输入字符串为NULL指针
* 2.输入字符串为空字符串
* 3.输入的字符只有一个正号或是一个负号
* 4.输入的字符的以空格或制表符开头
------------------------------------------------------------------------*/
#include<iostream>
using namespace std;
#include<malloc.h>
#include<assert.h>
#define MAX 10
enum Status {Valid=0,Invalid};
int now_status;//用于标识输入的字符串是有效还是无效;now_status=Valid 有效,now_status=Invalid 无效
int flag=1 ;//用于标识字符串所转换的整数的正负;正:flag=1,负:flag=-1;
int Str2Int(const char *string)
{
const char *str=string;
long long int num=0; //注意定义的整数类型:long long int
now_status =Invalid;
if(NULL!=str && '\0'!=*str)
{
//若开头是空格' '或是制表符'\t',则跳过空格和制表符,从第一个非上述字符开始转换
for(;*str==' '||*str=='\t';str++);
if('+'==*str) //遇到第一个非空格和制表符字符
{
str++;
flag=1;
}
else if('-'==*str)
{
str++;
flag=-1;
}
if('\0'!=*str)
{
while(*str !='\0')
{
if(*str >='0' && *str<='9')
{
num=num*10+*str-'0';
if(num>0x7fffffff)
{
num=0;
break;
}
str++;
}
else
{
num=0;
break;
}
}
if('\0'==*str)
{
now_status=Valid;
}
}
}
return num;
}
int main(void)
{
char *str=(char *)malloc(sizeof(char)*MAX);
assert(str);
cout<<"input the string: ";
cout<<"sizeof(long long int )="<<sizeof(long long int)<<endl;
cin>>str;
int num=Str2Int(str);
if(Invalid==now_status )
{
cout<<"The string you want to convert to a interger is invalid!"<<endl;
return 0;
}
else
{
cout<<"The string you want to convert to a interger is valid and the interger is: ";
if(-1==flag )
cout<<-num<<endl;
else
cout<<num<<endl;
}
return 0;
}
09-24
09-24