必威体育Betway必威体育官网
当前位置:首页 > IT技术

atoi函数的实现

时间:2019-09-28 13:15:29来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

atoi

atoi函数要求

我所实现的atoi函数有以下几个要求

1,这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或者符号后面跟随尽可能多的数字,并将其解释为数字的值。

2,字符串可以在形成整数的字符后包括多余的字符,将这些字符忽略,这些字符对于函数的行为没有影响。

3,如果字符串中的第一个非空白的字符不是有效的整数,或者没有这样的序列存在,字符串为空或者只包含空白字符则不进行转换。

4,如果不能执行有效的转换,则返回 0。如果正确的值超过的可表示的范围,则返回INT_MAX(2147483647)或 INT_MIN(-2147483648)。


小码哥要开始码代码啦!!!

#include<stdio.h>

#define INT_MAX 2147483647
#define INT_MIN -2147483678
//两个宏定义代表整型的边界值

long long strtoi(char *str,bool minus); //该处为strtoi函数的声明,定义成longlong类型,是为了判断比整型边界值更大和更小的值。

//该函数主要用于判断非空格首字符,接收遍历函数strtoi所传回来的整型值
int my_atoi(const char *str)
{
    int num = 0;//num用来表示所转换后的整数值
    if(str != NULL && *str != '\0')//等于NULL直接返回0
    {
        while(*str == ' ')//如果首字符是空格,那就接着向后遍历,直到找到第一个非空格的字符
        {
            ++str;
            continue;
        }
        bool minus = false;//设置一个标志,来判断该数的正负
        if(*str == '+')
        {
            ++str;
        }
        else if(*str == '-')
        {
            ++str;
            minus = true;//true代表该数为负数
        }
        if(*str != '\0')
        {
            num = strtoi(str,minus);
        }
    }   
    return num;
}

//strtoi函数时遍历其余所有的字符
long long strtoi(const char *str,bool minus)
{
    long long num = 0;
    while(*str != '\0')
    {
        if(*str >=0 && *str <= 9)//0-9为合法数字
        {
            int flag = minus ? -1 : 1; //代表该值的正负
            num = num * 10 + flag * (*str - '0');//将字符转换为相应的数字
        if(!minus && num > 0x7FFFFFFF)//整型最大值2的31次方-1
        {
            return INT_MAX;
        } 
        else if(minus && num < (signed int)0x80000000)//整型最小值-2的31次方
        //由于整型默认为无符号整型,所有比较负数大小时,要强转为有符号整型
        {
            return INT_MIN;
        }
        ++str;
        }
        else //遇到非法字符直接结束循环,返回当前的num
        {
            break;
        }
    }
    return num;
}
int main()
{
    char str[100] = {0};
    scanf("%s",str);
    int k = my_atoi(str);
    printf("%d\n",k);
    return 0;
}

测试用例

常规数值测试

上边界值测试

下边界值测试

异常值测试

测试用例还有很多,由于考虑到大家的观赏性,小码哥就举了这四类,大家可以自己去多测几组。


atoi函数的实现就到这里,码友们有什么问题可以给小码哥我留言,我会及时解决大家的问题。

码完,收工啦。

相关阅读

C#中Directory.GetFiles() 函数的使用方法(读取目录中

转自:http://www.365jz.com/article/24023   C#中Directory.GetFiles(string path , string searchPattern, SearchOption sea

自定义RadioGroup实现多行排列

今天做一个单选框,效果如下:这里需要自定义一个RadioGrouppackage yisu.cn.wedgit; import android.content.Context; import andr

线程间通信的几种实现方式

线程间通信的几种实现方式 首先,要短信线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基

用C语言实现一个C语言的编译器

用C语言实现一个C语言的编译器 目标:基于C0+文法的编译器,生成语法树,四元式,符号表,最后生成X86汇编(386) 接下来介绍一下整个的设计和

CreateFile函数详解

HANDLE CreateFile( _In_ LPCSTR lpFileName,//指向文件名的指针 _In_ DWORD dwDesiredAccess,// 访问模式(写 / 读) _In

分享到:

栏目导航

推荐阅读

热门阅读