首页 > 编程语言 >c++ 字符串转 整形

c++ 字符串转 整形

时间:2024-08-13 10:53:16浏览次数:12  
标签:字符 const string c++ atoi stoi 字符串 整形

目前有两种 string  转 整形的方式

std::atoi(const char*);
std::stoi(const std::string);

atoi() 是c语言风格,而stoi()是c++11标准库中新增的函数

两者的区别在

  1. atoi()的参数是 const char* , 所以我们必须将字符串的类型从string转换为const char类型才能够转换为int。string转const char 我们可以使用c_str();
  2. stoi()的参数是const string,不需要转化为 const char*;
  3. stoi()会做范围检查,默认范围是在int的范围内的,如果超出范围的话则会runtime error!
  4. atoi()不会做范围检查,如果超出范围的话,超出上界,则输出上界,超出下界,则输出下界; 
  5. 如果输入字符串不是一个有效的数字字符串(例如字符串中含有字母),‌stoi()会抛出一个invalid_argument异常,会使程序崩溃。
  6. atoi()如果遇到无效的输入,‌会返回0,‌而不提供任何错误检查或处理机制。‌
  7. stoi()是C++11标准库中新增的函数,‌提供了更多的功能和安全性,‌因为它支持更多的错误检查和处理机制,‌并且可以处理带符号的整数字符串。‌
  8. atoi是C语言中的函数,‌不提供任何错误检查或处理机制,‌且只能处理不带符号的整数字符串。‌

相对来看 stoi()  相较于 atoi() 更适合我们使用,但是它也存在遇到非数字字符会抛出异常的问题。如果我们面临的使用场景是 字符串中带有非数字字符,则需要我们对字符串进行拆分、删减后才能够使用stoi() 。

int StringToInt(const std::string& str)
{
    int ret;
    std::istringstream is(src);
    is >> ret;
    return ret;
}

StringToInt函数能够避免因为字符串中带有非数字字符而抛出错误,但是有使用场景限制。

  1. 字符串开头不能为非数字字符
  2. 如果类似 “13a13” 这种数字字符与非数字字符交替的情况,则只会对非数字字符前的数字字符进行转换

标签:字符,const,string,c++,atoi,stoi,字符串,整形
From: https://blog.csdn.net/m0_64240990/article/details/141088446

相关文章

  • hdu7462-字符串【SAM,二分】
    正题题目链接:https://acm.hdu.edu.cn/showproblem.php?pid=7462题目大意你有一个由\(a,b\)组成的字符串\(s\)。有\(m\)个操作:询问有多少个本质不同的串\(t\)使得\(s[l,r]\)是\(t\)的子串且两个串在\(s\)中的出现次数相同。询问有多少个本质不同的串\(t\)......
  • C++:内存管理
    C++内存管理的概念        C语言内存管理方式(malloc/free)在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。new/delete                    new/d......
  • C++:类与对象(下)
    再探构造函数        构造函数体赋值与初始化列表其实之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函数初始化还有⼀种⽅式,就是初始化列表,C++规定初始化列表的使⽤⽅式是以⼀个冒号开始,接着是⼀个以逗号分隔的数据成员列表,每个"成员变量"后⾯跟......
  • C++:类与对象(中)
    类的默认成员函数:        在C++中,如果你没有显式地定义某些特定的成员函数(如构造函数、析构函数、拷贝构造函数、拷贝赋值运算符和移动构造函数),那么编译器会自动生成这些函数。这些由编译器自动生成的函数被称为默认成员函数。        构造函数   ......
  • C语言和C++中的动态内存管理------malloc和free的区别
    引言:动态内存管理:需要根据具体情况来设定需要的内存大小,同时可能需要大于1Mbyte的连续空间。此时我们无法使用静态数组。原因是因为静态数据的开辟是在栈空间,其次栈空间的大小在连续分配时不能超过1Mbyte,因此引入了动态内存管理。C语言C语言中动态内存管理的有四个函数:mal......
  • SecureCoding in C and C++(二)
    经过上期的环境搭建过后,我们将正式的学习C++系列,首先要学习的是C++的一些常用的变量从编译和连接学起似乎也是不错的选择。个人总结的一句话:编译其实就是对预处理语句进行处理后,然后对语句进行处理。对预处理语句,例如:#include之类的处理方式其实就是将文件内容复制到对应......
  • C ++ 也可以搭建Web?高性能的 C++ Web 开发框架 CPPCMS + MySQL 实现快速入门案例
    什么是CPPCMS?CppCMS是一个高性能的C++Web开发框架,专为构建快速、动态的网页应用而设计,特别适合高并发和低延迟的场景。其设计理念类似于Python的Django或RubyonRails,但针对C++提供了更细粒度的控制和更高效的性能。主要特点和优点1.高性能与并发处理​Cp......
  • C++类和对象(类的定义)
    目录一·类的定义1.1类的定义格式1.2访问限定符(public、private、protected)1.3类域一·类的定义1.1类的定义格式定义类的关键字是class,类定义结束时,后面的分号不能省略。类体中的内容称为类的成员:①类中的变量称为类的属性或成员变量;②类中的函数称为类的方......
  • 字符串查找 - 模拟实现strstr 、BF算法 、 KMP算法
    文章目录前言一、模拟实现库函数strstr二、BF算法三、KMP算法总结前言路漫漫其修远兮,吾将上下而求索。一、模拟实现库函数strstrTips:此处采用利用指针+字符串末尾'\0'的判断,当然你可以利用数组的下标;库函数strstr的原型:char*strstr(constchar*str1,......
  • 【C++面向对象】泛型编程(模板) 新手小白都能懂!
    目录泛型编程是什么?模板和泛型编程的关系?函数模板定义调用类模板定义调用总结/小注泛型编程是什么?顾名思义,“泛型”即“广泛的类型”,即不拘泥于一种特定类型的编程方法。在泛型编程时,我们通常使用一个或多个类型占位符来表示一种或多种类型,这些类型对于模板而言......