首页 > 编程语言 >C++(atoi())

C++(atoi())

时间:2024-08-23 10:27:41浏览次数:7  
标签:std const 数字 int C++ atoi 字符串

目录



atoi() 是 C++ 标准库中的一个函数,用于将 C 风格字符串转换为整数。atoi 是 "ASCII to Integer" 的缩写,它可以将包含数字的字符串解析为整数值。

1. 函数

int atoi(const char *str);

1.1 参数

  • str:一个 C 风格的字符串,通常是 const char* 类型,表示待转换的数字字符串。该字符串必须以 null 结尾 \0

1.2 返回值

  • 函数返回转换后的整数值。
  • 如果字符串中不包含有效的数字或字符串的开头不是数字,atoi 将返回 0

1.3 注意事项

  • atoi 不能处理超出 int 类型范围的值。如果输入的字符串表示的数字超出了 int 类型的范围,行为是未定义的。
  • atoi 不提供错误检测能力。例如,如果字符串包含非数字字符,atoi 将忽略这些字符,并从字符串的开头部分进行转换。


2. 示例

#include <iostream>
#include <cstdlib> // 包含 atoi() 函数

int main() {
    const char* str1 = "1234";
    const char* str2 = "56abc";
    const char* str3 = "abc123";
    
    int num1 = atoi(str1);  // 转换为整数 1234
    int num2 = atoi(str2);  // 转换为整数 56,遇到非数字字符后停止
    int num3 = atoi(str3);  // 转换为整数 0,开头没有数字
    
    std::cout << "num1: " << num1 << std::endl;
    std::cout << "num2: " << num2 << std::endl;
    std::cout << "num3: " << num3 << std::endl;

    return 0;
}

输出:

num1: 1234
num2: 56
num3: 0


3. atoi 的局限性

  • 没有错误处理:不能检测输入错误,比如无法区分输入的字符串不含数字与数字部分超出 int 的范围(两种情况下返回值都是 0)。
  • 性能问题atoi 无法处理空白字符、符号、或进制转换等复杂场景。


4. 推荐替代函数

C++11 标准后,atoi 常被 std::stoi 取代。std::stoi 提供了错误检测并且支持更多特性:

int num = std::stoi("123");
  • std::stoi 抛出 std::invalid_argument 异常,如果无法转换为整数,或抛出 std::out_of_range 异常,如果数字超出范围。


标签:std,const,数字,int,C++,atoi,字符串
From: https://www.cnblogs.com/keye/p/18375461

相关文章

  • C++ 链表
    1.前言链表:不仅存储 当前元素的数据,还存储着 元素排列顺序2. 正题2.1如何存储节点?我们可以使用结构体 数组来存储 链表节点structNode{intval;//可以是string或其它复杂的类型intnxt;}node[N];Tip:下标顺序不是单链表顺序 val代表 元......
  • c++一些面试题目
    摘自:https://www.cnblogs.com/lidabo/p/3284921.html1、Whatisachievedbyprefixingthe'static'keywordtoafile-levelfunctionorfile-levelvariabledeclaration? 使用static关键字修饰文件级的函数和变量起到什么作用? key:对变量来说,不允许文件外的程序访问;对......
  • C++模板的细节改进
    emsp;emsp;C++11改进了编译器的解析规则,尽可能的将多个右尖括号(>)解析称模板参数结束符,方便我们编写模板相关的代码。1.模板的右尖括号emsp;emsp;在C++98/03的泛型编程中,模板实例化有一个很繁琐的地方,那就是连续两个右尖括号(>>)会被变异器解释称右移操作符,而不是模板参数表的结束......
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector(模拟实现)
    1.存储结构namespacezone{ template<classT>//需要模板 classvector { public:private: iterator_start; iterator_finish; iterator_endofstorage;};}可见,vector内核是由三个指针实现的2.默认成员函数 2.1.构造函数1.初始化列......
  • C++初学(14)
    14.1、while循环和for循环相比,while循环没有初始化和更新部分,它只有测试条件和循环体。while(text-condition)body首先程序计算圆括号内的测试条件(text-condition)表达式。如果该表达式为ture,则执行循环体中的语句。和for循环一样,循环体也由一条语句或两个花括号定义的......
  • CMake编译不同文件目录下的C++文件
        由于我们构建一个项目的时候,通常不会将所有的源文件放在一个文件目录下,这样既不方便开发,也不方便源码阅读,我们通常会对项目文件进行分层,比如分为include、src、res、lib这些目录,src下又分为model、controller、view这些目录。所以跨文件编译C++文件就相当必要了,如......
  • C++设计模式1:单例模式(懒汉模式和饿汉模式,以及多线程问题处理)
    饿汉单例模式        程序还没有主动获取实例对象,该对象就产生了,也就是程序刚开始运行,这个对象就已经初始化了。 classSingleton{public: ~Singleton() { std::cout<<"~Singleton()"<<std::endl; } staticSingleton*get_instance() { return&sin......
  • 【C/C++ 软件开发模拟面试 集】cmake 相关知识点模拟面试
    摘自:https://zhuanlan.zhihu.com/p/662623216第一轮:基础知识 1.1什么是CMake? 面试官: 请问你能简单描述一下CMake是什么,以及它通常用来做什么吗? 面试者: CMake是一个跨平台的自动化构建系统,主要用来管理软件构建的过程,它使用一个名为CMakeLists.txt的配置文件来指导编......
  • c++矩阵旋转问题
    问题有一个MxN的矩阵,设计函数将其顺时针旋转90度。打印示例Originalmatrix:123456789Rotatedmatrix(90degreesclockwise):741852963代码#include<iostream>#include<vector>usingnamespacestd;voidrotateMatrix90Clockwise(constv......
  • C++—八股文总结(25秋招期间一直更新)
    1、const1.1指针常量和常量指针说说constint*a,intconst*a,constinta,int*consta,constint*consta分别是什么,有什么特点。constint*a==intconst*a; //可以通过a访问整数值,但不能通过a修改该整数的值,指针本身是可变的,可以指向不同的整数constint......