My——atoi(进制,空格,符号,溢出等处理),最全最细,有问题请问我

【atoi函数的功能介绍及使用与模拟实现——超详细版本】 atoi函数的功能介绍及使用与模拟实现——超详细版本 阅读详情

/*
题目1:(简答题:10.0分)
编程实现将字符串转换为整型数;
int my_atoi(const char *str);
1.遇到非数字字母,停止转换;
示例: str = “234.324” ; 返回值是234;
2.首先出现空格的字符串可以转换,转换开始后,遇到空格停止转换;
示例: str =" 342 456"; 返回值是342;
3.可以处理正负号;
示例: str = " +234.bad" ; 返回值是 234; str = " -342ab.234" ; 返回值是:-342;
4.可以处理八进制,和十六进制;
示例: str = " +0xff"; 返回值是 255; str = " 0123" ; 返回值是 83;
5 可以处理int 型溢出的情况;
示例; str = “567898765678987656789”; str = 2147483647; (INT_MAX 宏在 limits.h 头文件中)
str = "-234324665544325345325; str = - 2147483648; (INT_MIN 宏在limits.h 头文件中)
*/

#include <iostream>
#include <ctype.h>
#include <limits.h>
#include <stack>

using namespace  std;

//处理单个atoi
int my_atoi_single(const char p)
{
    int tmp;
    if(isdigit(p))
    {
        tmp = p - '0';
    }
    else
    {
        tmp = p - 'W';
    }
    return tmp;
}

//atoi的子函数,将进制,字符,符号传递进来
long long  my_atoi_Son(const char *p,int flag,int system)
{
    stack<char> sta;
    long long sum = 0;
    int tmp = 0;
    while(isdigit(*p) || (*p >= 'a' && * p <= 'f'&&system == 16))
    {
        sta.push(*p);
        ++p;
    }
    int n = sta.size();
    for(int i = 0; i < n;++i)
    {
        tmp = my_atoi_single(sta.top());
        sta.pop();
        for(int j = 0;j < i;++j)
        {
            tmp = tmp * system;
        }
        sum += tmp;
        if((sum * flag) >= INT_MAX)
        {
            sum = INT_MAX;
            return sum;
        }
        if((sum * flag) <= INT_MIN)
        {
            sum = INT_MIN;
            return sum;
        }
    }
    return flag * sum; 
}


long long  my_atoi(const char *str)
{
    long long integer = 0;
    int flag = 1;
    int system = 10;
    const char * p = str;
    while(*p == ' ')
    {
        ++p;
    }
    if (*p == '-')
    {
        flag = -1;
        ++p;
    }
    else if(*p == '+')
    {
        ++p;
    }
    if(!isdigit(*p))
    {
        throw exception("输入的字符串,无法进行atoi!");
    }
    if(*p == '0')
    {
        ++p;
        system = 8;
        if(*p == 'x')
        {
            ++p;
            system = 16;
        }
    }
    integer = my_atoi_Son(p,flag,system);
    return integer;
}

int main()
{
    const char * p = "-567898765678987656789";
    printf("%d\n",my_atoi(p));
}

Kettle入门指南:从安装到数据转换实战 本文提供Kettle(Pentaho Data Integration)的完整入门指南,涵盖从Java环境安装、软件配置到核心概念(转换与作业)的详细解析。通过实战案例,手把手教你如何将文本文件数据导出到Excel,并连接MySQL数据库进行数据导入,帮助你快速掌握这一强大ETL工具的基本使用,实现高效数据搬运与转换。 阅读详情

相关推荐

MOOS-ivp 实验三 MOOS简介(3)

MOOS-ivp 实验三 MOOS简介(3) 继上一篇文章继续对实验进行记录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MOOS-ivp 实验三 MOOS简介(3)六、A Simple Example with pXRelay1.pXRelay基本使用2.pXRelay简单例子3.pXRelay实验七、First Experiments in Modifying MOOS App Code1.下载一个MOOS模板文件2.打开MOOS模板文件总结 六、A Simple E

weixin_44151170的博客 2534

atoi函数的实现

写atoi函数的时候需要注意一下几点 1. 字符串前的空白 2. 字符串所表示数值的正负号 3. 结束条件,遇到非数字或者字符'\0'结束 4. 考虑溢出,分别与int值所能表示的最大(0x7fffffff)和最小值(0x8000000)进行比较 5. 考虑异常输入情况下,用全局变量valid来标识,对于"+/-" "0" "+abc"需要进行区分 1 #define I...

weixin_30790841的博客 205

VSAN闪存缓存磁盘故障处理指南-RAID0模式实战解析

本文详细解析了VSAN集群中RAID0模式下的闪存缓存磁盘故障处理全流程。通过模拟真实故障场景,从告警识别、数据重建策略到磁盘组重构,提供了手把手的实战操作指南,并深入探讨了RAID0缓存故障的独特影响与风险,为运维人员应对此类高性能存储架构的突发问题提供了专业解决方案。

assembly8low的博客 446

myatoi

atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回0。特别注意,该函数要求被转换的字符串是按十进制数理解的。atoi输入...

weixin_30693683的博客 319

保姆级教程:用MS建完分子模型,如何一键转成LAMMPS能用的data文件?

本文详细介绍了如何将Materials Studio(MS)构建的分子模型转换为LAMMPS可用的data文件的全流程。重点讲解了力场选择、环境配置、转换命令参数解析及常见问题排查,帮助初学者快速掌握MS与LAMMPS之间的数据转换技巧,特别适合计算材料学领域的研究人员。

weixin_42665255的博客 471

基于Labview2012实现的双通道信号源(课程设计)

双通道信号源,产生8种波形,能进行调制,带信号幅度与频率扫描功能,波形可存储与导入

qq_40617082的博客 1461

atoi中含有其他字符时是怎么处理的

读到非数字字符则结束转换并将目前已读结果返回

arron的专栏 2693

树莓派介绍与可安装的操作系统

树莓派是一款由英国树莓派基金会开发的信用卡大小的微型计算机。处理器(CPU)内存(RAM)图形处理器(GPU)USB 接口网络接口(以太网和 Wi-Fi)视频输出(HDMI)音频输出用户只需添加电源、存储卡、显示器和输入设备(键盘、鼠标),就可以将其当作一台功能齐全的电脑使用。主要特点:低成本:价格亲民,适合教育和个人项目。小巧便携:体积小,便于携带和部署。功能强大:支持多种编程语言和操作系统,功能不逊于传统电脑。树莓派从最初的教育工具发展成为功能强大的多用途平台。最新的树莓派 5。

像风一样自由的博客 2198

B00005 函数atoi()(去空格,带符号)

这是一个通用的基础程序,将数字字符串转换为整型数。 这个程序会去掉字符串开始的空格,并且能够转换带符号的整数。 该程序来自K&C的《C程序设计语言》一书。 程序如下: /* 带符号的atoi,跳过前面的空格 */ #include <stdio.h> #include <ctype.h> int atoi(char s[...

weixin_33826609的博客 206

B.3【智能标注】:基于Labelstudio的UIE半监督深度学习的智能标注方案(云端版),提效。

Label Studio 所提供的 Machine Learning Backend 提供了一个比较灵活的辅助人工标注的框架,我们通过它确实可以加快 nlp 数据的标注Label Studio 的 enterprise 版本提供了 Active Learning 的流程,不过从其描述看这个流程并不完美,尤其是 fit 部分,由于 Label Studio 低估了「Train」所花费的时间,所以每次标注都自动训练的流程可能并不会那么顺滑(会在链接时候等待一段时间)

丨汀、的博客 1840

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动

在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。

sinat_33909696的博客 2465

atoi函数的实现及注意事项

atoi函数的实现及注意事项 在编写模拟实现atoi函数时,不应该只考虑到只有的数字字符串的简单情况,除此之外,还应该考虑到以下几种状况。 1. 指针为NULL 2. 空字符串 3. +,-号处理 4. 溢出处理 5. 遇到异常字符怎么处理 至于atoi函数的返回值,如果只是返回0或者1,没有状态标记,那么这个0或者1是正常状态的0或者1 ("0"),还是异常状态的0或者1("0

CC285494320的博客 3449

强化学习在视觉导航中的应用

强化学习在视觉导航中的应用​ ,人工智能,计算机视觉,大模型,AI,强化学习(Reinforcement Learning, RL)是一种通过智能体(Agent)与环境进行交互,以最大化累积奖励为目标的机器学习范式。它不依赖于预定义的规则或大量标注数据,而是让智能体在试错过程中学习最优策略。计算机视觉(Computer Vision)则赋予智能体 “观察” 环境的能力,使其能够从图像或视频中提取有用信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

C语言学习笔记20260718-实现任意进制字符串转十进制(my_atoi_base)

本文介绍了一个支持任意进制(2-36进制)字符串转十进制整数的C语言函数实现。核心算法基于秦九韶算法,通过逐位扫描、累加计算完成转换。函数具有以下特点:1)处理前导空格和正负号;2)自动识别十六进制前缀;3)内置溢出检测机制;4)支持大小写字母表示10-35的数值。代码包含完整注释和测试用例,适用于嵌入式开发等需要底层数据处理场景。关键点包括字符数值映射、防溢出设计和进制范围限制等。

2503_92342417的博客 592

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

atoi函数详解及其模拟实现——一篇文章带你彻底搞懂atoi

一篇文章带你彻底搞懂atoi函数!

2401_83431652的博客 5636

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言 My_Atoi函数、My_Itoa函数

5.如果整数数超过32位有符号整数范围[-2^31,2^31-1],需要截断这个整数,使其保持在这个范围内。具体来说,小于-2^31的整数应该被固定为-2^31,大于2^31-1的整数应该被固定为2^31-1。2.检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。4.将前面步骤读入的这些数字转换为整数(即,"123"->123,"0032"->32)。如果没有读入数字,则整数为0。3.读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。.........

qq_46108282的博客 712

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C标准库】深入理解C语言 atoi 函数:字符串转换为整数

本文讲解C语言 atoi 函数,介绍其原型、转换规则与基础用法,指出它无法区分转换失败和数值0、无溢出检测的缺陷。同时给出带溢出判断的手动实现代码,并建议工程开发中使用更安全的 strtol 函数。

聆风吟的博客 4646

手写 atoi 的底层逻辑:C 语言整数解析与溢出防护实战

atoi 是 C 标准库中看似简单却暗藏玄机的字符串转整数函数,其本质是 ASCII 字符序列到有符号整数的确定性映射。它遵循严格的状态机流程:跳过前导空白、识别单符号位、逐位解析数字,并在每一步执行前置整数溢出检测,以规避有符号整数溢出(UB)这一未定义行为。技术价值在于零开销抽象、确定性行为和跨平台可预测性,广泛应用于嵌入式配置解析、协议字段解包、日志数值提取等对稳定性与性能敏感的场景。本文聚焦于手写生产级 my_atoi 的核心实现,涵盖 isspace/isdigit 的 unsigned char

weixin_33912638的博客 394

atoi函数功能以及模拟实现

目录 一,atoi函数的基本功能 1.1基本功能 1.2功能实现 二,模拟实现 2.1实现过程 2.2完整代码 一,atoi函数的基本功能 1.1基本功能 基本格式:int atoi(const char * str) 根据其基本格式,atoi函数的基本功能, 为将 str 指向的字符串转化为整形数。也就是将一个原先为一个包含整型数的字符串,将其内容中的整形数抠出来,单独返回,当然,既然是整形数,如果是负数,则会将符号也一起返回。 1.2功能实现 那么我们了解了其基本功能之后

qq_52777887的博客 2986

手写 atoi 实现:C 语言底层原理与工业级状态机设计

atoi 是字符串转整数的基础函数,其本质是一个轻量级的字符解析器,涉及 ASCII 编码映射、有符号整型溢出判断、前导空白处理及符号状态管理。理解其原理需掌握整数边界(INT_MAX/INT_MIN)、无符号预判溢出、有限状态机(FSM)建模等核心机制。它广泛应用于嵌入式裸机开发、系统编程、安全敏感解析场景,也是调试内存行为与指针逻辑的重要训练入口。本文聚焦于不依赖标准库的纯 C 实现,深入剖析字符校验、状态流转与 `2147483648U` 等关键细节,提供可经 GCC 严检与 Valgrind 验证的

weixin_34122604的博客 523

atoi函数的认识与模拟

atoi函数详解与模拟

m0_53697204的博客 1088

atoi和itoa的模拟实现

1.atoi函数: 函数原型: int atoi (const char * str); 该函数的功能是将字符串转化为整型。分以下几种情况: 1)如果该字符串的最开始是 -,并且后面加的是数字,那么转化的整数是负整数。 2)如果该字符串的最开始是+ 或者是数字,那么转化的是正整数。 3)如果最开始是-/+ 加其他字符,就是不合法的,直接返回0. 4)考虑溢出,正溢出和负溢出。 模...

Qiana_wq的博客 519

面试编程——atoi实现

// // main.cpp // my_atoi // // Created by on 14-5-6. // Copyright (c) 2014年 yuanbo. All rights reserved. // /* 基础需求: (1)‘+’、‘-’号 (2)开头空格 (3)合法性判断 (4)溢出判断 高级需求(未实现): (1)逗号,如1,234,567 (

浣熊_BUPT 1031

手写atoi详解:C语言字符串转整数的底层实现与工业级实践

atoi是C语言中字符串转整数的基础函数,其本质是ASCII字符到二进制整型的映射过程,涉及字符识别、符号处理、十进制累加和整数溢出控制等核心原理。理解其实现机制,有助于掌握C语言‘零抽象’特性与内存安全边界,提升嵌入式开发、裸机编程及系统级代码健壮性。工业级实现需规避标准库依赖(如-nostdlib场景),精准复现POSIX行为(前导空格跳过、符号解析、非法字符截断、静默溢出截断),并支持跨平台验证(x86/ARM)。本文以可运行代码为载体,深入剖析atoi四阶段逻辑链,覆盖面试高频考点与真实项目痛点。

weixin_34195546的博客 388

C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)

C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)。完结撒花。

参考书籍:《C语言程序设计》《数据结构》《C++ Primer》《Effective C++》《STL源码剖析》《现代操作系统》《UNIX环境高级编程》《图解TCP/IP》《图解HTTP》《Linux高性能服务器编程》《剑指Offer》《算法导论》 694

嵌入式Linux开发:深入解析atoi与strtol函数原理、选型与安全实践

在C语言和嵌入式系统开发中,字符串与数字的相互转换是数据处理的基础操作,其核心在于理解字符编码与数值表示之间的映射关系。转换函数通过逐字符解析,依据进制和符号规则,将ASCII字符序列转换为二进制整数或浮点数。掌握其原理对于保障程序健壮性至关重要,能有效避免数据解析错误、缓冲区溢出等安全隐患。在嵌入式Linux及物联网设备开发场景下,这类转换广泛应用于传感器数据采集、通信协议解析和系统配置读取。本文将聚焦atoi与strtol等核心函数,对比其实现机制,并探讨在资源受限环境中如何平衡性能与安全性,为开发者提

weixin_30915275的博客 406
上一篇: 最短路径(Dijkstra)
下一篇: My——itoa
恩嗯
博客等级 码龄8年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值