您的位置:首页 > Web前端

剑指offer——字符串转换为整数

2017-04-30 12:55 375 查看
在c语言中,有一个函数我们可能不经常使用,那就是字符串转换为整数函数 atoi()

atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数

atoi( ) 函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0

当字符串为空,或者输入的字符串是‘0’,atoi()是通过一个全局变量来区分的,如果非法输入,返回0,并把这个全局变量设为一个特殊标记,如果输入的是‘0’,返回0,不会设置全局变量,这样就可以区分得到的0值得情况


enum Typename
{                      //定义输入标记
kvalid = 0,
kinvakid = 1

};
int get_Typename = kvalid;   //全局变量来定义标记
int StrToint(const char* str)
{
get_Typename = kinvakid;
long long num = 0;
if (str != NULL && *str != '\0')   //判断传入是否为空字符
{
int  minus = 1;      //   判断输入的字符改写之后的正负
if (*str == '+')
str++;
else if (*str == '-')
{
str++;
minus = -1;
}
if (*str != '\0')
{
num = StrTointcore(str, minus);
}
}
return num;
}
long long StrTointcore(const char * src, int  minus)
{
long long num = 0;
while (*src != '\0')
{
if (*src >= '0'&& *src <= '9')   //字符为0-9 时执行转换
{
num = num * 10 + minus *(*src - '0');
if ((num > 0x7FFFFFFF) || (num < 0x80000000))  //判断转换后是否上溢出还是下溢出
{
num = 0;     //溢出返回0
break;
}
src++;
}
else
{
num = 0;
break;
}
}
if (*src == '\0')
{
get_Typename = kvalid;

}
return num;
}


测试用例

1、输入的字符串表示正数,负数,0
2、边界测试(最大正整数,最小负整数)
3、特殊输入测试(输入字符串为null,输入字符串为空字符串,输入的字符串有非法数字字符)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 剑指offer