//方案一
int stringToInt1( char* string )//此代码就是大多数人能想到的,
//但这个代码无法完成较为复杂的字符串转换,
//比如有字母嵌套是输出的就是随机值,
//另外没有检查字符串是否是空指针,
{
int number=0;
while(*string !=0)
{
number= number * 10+ *string - '0';
++string ;
}
return number;
}
//方案二
int stringToInt2( char* string ) //次代码虽然解决空指针问题,但是仍然不完美,
//此代码无法解决非法字符串的输入问题。例如
//加减号的处理没有作。
{
int number=0;
if(string==NULL)
{
perror("string为空\n");
}
while(*string!=0)
{
number= number * 10+ *string - '0';
++string ;
}
return number;
}
//方案三
enum Status {
kValid=0,
kInvalid
};
int g_nStatus=kValid;
int stringToInt3(const char* string ) //此代码虽然考虑的相对全面一点但是
//并没有将g_nStatus的非法输入设置不全,
//正负号后面的非法输入也考虑不全,
//因此此代码也不成功
{
int number=0;
g_nStatus=kInvalid;
if(string!=NULL)
{
bool minus=false;
const char* string=string;
if(*string=='-')
{
string++;
minus=true;
}
while(*string!=0)
{
if(*string>='0'&& *string<='9')
{
number=number*10+(*string-'0');
string++;
}
else
{
number=0;
break;
}
}
if (*string==0)
{
g_nStatus=kValid;
if(minus)
number=0 - number;
}
}
return number;
}
//方案四
enum Status {
kValid= 0,
kInvalid
};
int g_nStatus=kValid;
int stringToInt4(const char* string ) //此代码将空字符串""和只有一个正
//负号的情况都考虑到了,同时正数的最大输入值
//设置为0f7fffffff,最小的负数为0x80000000;
//并且将正负整数溢出的情况也都考虑到了,
//因此此代码可以比较好的解决这些问题
{
g_nStatus=kInvalid;
long long num=0;
if(string!=NULL&& *string!='\0')
{
bool minus=false;
if (*string=='+')
{
string++;
minus=true;
}
else if (*string=='-')
{
string++;
minus=true;
}
if (*string!='\0')
{
num=stringToInt4(string,minus);
}
}
return (int)num;
}
long long stringToInt5(const char* string,bool minus)
{
long long num=0;
while(*string!='\0')
{
if (*string>='0'&& *string<='9')
{
int flag=minus ? -1:1;
num=num*10+flag*(*string='0');
if (!minus && num<(signed int )0x80000000)
{
num=0;
break;
}
string++;
}
else
{
num=0;
break;
}
}
if (*string=='\0')
{
g_nStatus=kValid;
}
return num;
}
把字符串转为整数
最新推荐文章于 2021-07-28 20:29:28 发布