C语言--atoi函数详解及模拟实现

本篇概要

本篇博客主要讲述atoi函数的定义,用法及模拟实现。


文章目录


1.atoi函数简介

atoi() 是 C语言的一个标准库函数,定义在<stdlib.h>头文件中。

atoi() 函数用于将字符串转换为整数。

具体来讲,atoi() 函数首先会丢弃尽可能多的空白字符,直至找到第一个非空白字符,然后从该字符开始,识别 "+"、"-" 以及 0-9之间的十进制数,最后将它们转换成整数。如果构成整数的后面还有其它字符,这些字符将会被忽略。

2.atoi函数的原型及参数

原型:

c 复制代码
int atoi(const char *str);

参数: str:指向要转换的字符串。

...

返回值: 如果转换成功,函数返回转换后的整数。

如果由于 str 为空或者 str 字符串无法转换为整数,函数返回 0。

如果字符串表示的值超出了 int 类型所能表示的整数范围,函数返回的数值是无意义的(垃圾值)。

3.atoi函数的使用举例

c 复制代码
int main() 
{
    const char *str1 = "123";
    const char *str2 = "-123abc12"; 
    const char *str3 = "abc"; 
    int value1 = atoi(str1);
    int value2 = atoi(str2);
    int value3 = atoi(str3); 
    printf("Value of str1: %d\n", value1);
    printf("Value of str2: %d\n", value2);
    printf("Value of str3: %d\n", value3); 
    return 0;
}

上述代码将转换三个字符串,前两个包含有效的整数表示,最后一个包含无效表示。通常的结果为:

Value of str1: 123

Valueof str2: -123

Value of str3: 0


4.atoi函数的模拟实现

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int isempty(char* str)
{
    if (str == ' ' ||
        str == '\t' ||
        str == '\n' ||
        str == '\f' ||
        str == '\v' ||
        str == '\r')
    {
        return 1;
    }
    return 0;
}

int isnumber(char* str)
{
    if (str >= '0' && str <= '9')
    {
        return 1;
    }
    return 0;
}

int  my_atoi(char* str)
{
    assert(str != NULL);
    char sign;
    int flag = 0;
    while (isempty(*str)==1)//判断是否为空
    {
        str++;
    }
    sign = *str;
    if (sign == '-' || sign == '+')
    {
        str++;
    }
    while (isnumber(*str) == 1)//判断是否为数字
    {
        flag = 10 * flag + (*str - '0');//在循环过程中,每次处理一个数字字符时,我们需要将其转换成对应的整数值,并将其累加到已经转换好的部分上。
                                        //乘以10的目的是为了将已经转换好的部分向左移动一位,为新的数字字符腾出位置。
        str++;
    }
    return sign == '-' ? -flag : flag;
}


int main()
{
    const char* str1 = "123";
    const char* str2 = "-123abc12";
    const char* str3 = "abc";
    int value1 = my_atoi(str1);
    int value2 = my_atoi(str2);
    int value3 = my_atoi(str3); 
    printf("Value of str1: %d\n", value1);//123
    printf("Value of str2: %d\n", value2);//-123
    printf("Value of str3: %d\n", value3); //0
    return 0;
}

如图所示,我们实现了atoi函数。

相关推荐
|晴 天|2 分钟前
前端闭包:从概念到实战,解锁JavaScript高级技能
开发语言·前端·javascript
点云SLAM11 分钟前
C++ error C2065: “M_PI”: 未声明的标识符 解决方案
开发语言·c++·error c2065·m_pi未声明 解决方案
qq_3363139315 分钟前
java基础-stream流练习
java·开发语言·python
草莓熊Lotso17 分钟前
C++11 核心精髓:类新功能、lambda与包装器实战
开发语言·c++·人工智能·经验分享·后端·nginx·asp.net
黎雁·泠崖31 分钟前
【C语言指针精讲】从内存到运算,吃透指针核心逻辑
c语言·开发语言
秦苒&37 分钟前
【C语言指针四】数组指针变量、二维数组传参本质、函数指针变量、函数指针数组
c语言·开发语言·c++·c#
秋雨雁南飞39 分钟前
C# 字符串占位
开发语言·c#
拾贰_C39 分钟前
[Python | pytorch | torchvision ] models like ResNet... 命名变量说明
开发语言·pytorch·python
傅里叶的耶39 分钟前
C++ Primer Plus(第6版):第三章 处理数据
开发语言·c++
CC.GG1 小时前
【C++】AVL树
java·开发语言·c++