C++中字符与数字的转化方法

这篇具有很好参考价值的文章主要介绍了C++中字符与数字的转化方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、string → int

1. 利用 ASCII 码差值计算

定义一个 string 类型字符串 s ,我们可以根据 ACSII 码表得知:
字符 ‘0’ - ‘0’ = 0 ,‘1’ - ‘0’ = 1 ,‘2’ - ‘0’ = 2…以此类推可知

s[i] - ‘0’ = s[i]表示的那个整数

依次将得出的整数加入 a*10 中,便可得到最后想要的整数结果

string s = "123";
int a = 0;
for (int i = 0; i < s.size(); i++) {  //从高位到低位
    a = a * 10 + (s[i] - '0');         //*10 让个位空出,将新的低位整数加入进去
}

根据代码,可以看出这是一个 O[n] 的算法,其中 n = s.size(); 在处理 s 长度较大的情况时,单是字符串的转化就会耗费巨大的时间

2. 利用位运算实现

string s = "123";
int a = 0;
for(int i = 0; i < s.size(); i++){
	a = a * 10 + (s[i] ^ 48); 
}

这种方法与利用 ASCII 码差值计算的方法没有什么差别,仅对 s[i] - ‘0’ 的语句进行卡常性质的优化

3. 使用C++标准库中的函数atoi

string s = "123";
int a = atoi(s.c_str());

其他数据类型也有类似函数,如浮点型 atof() , long 型 atol()
利用标准函数库中的函数可以快速有效地实现 string 向 int 的转化

a = atoi("123");                               //a = 123

a = atoi("123aaa");                            //a = 123,数字后的非数字字符会被自动忽略

a = atoi("+123");
a = atoi("-123");                              //a = 123(-123),+、-属于合法符号

a = atoi("-1111111111111111111111111111111111");
a = atoi("1111111111111111111111111111111111");//传入一个超长的数字字符串是非法的(正数负数都是)

a = atoi("aaa123");                            //数字前含有非数字且非正负字符是非法的

a = atoi("NULL");
a = atoi("");                                  //传入一个空字符串或空指针都是非法的

4. 用 sstream 头文件中定义的字符串流对象实现转换

istringstream is("123");
int a;
is >> a; // 从 is 流中读入一个 int 整数存入 a 中

插播一下字符串流stringstream–<sstream>详解

二、int → string

1. 利用位运算实现

注意:该方法仅限于单个字符与数字间的转化(字符串不易操作,复杂度较高,并不适合作为字符与数字的转化的算法使用)

char c = '8';
a = c ^ 48;

2. 使用C++标准库中的函数

int a = 123;
string s = to_string(num);

和 atoi 相同的是,当需要转化的数据过大时,也可能出现非法情况文章来源地址https://www.toymoban.com/news/detail-736198.html

3. 用 sstream 头文件中定义的字符串流对象实现转换

ostringstream os;            // 构造一个空的输出字符串流
int a = 123;
os << a;                     // 向输出字符串流中输出 a 的内容
string s = os.str();         // 利用 str 函数获取流中的内容

到了这里,关于C++中字符与数字的转化方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++之string字符串比较方法

    📣📣📣📣📣📣📣📣 ✏️作者主页:枫霜剑客 📋 系列专栏:C++实战宝典 🌲 上一篇: C++之string字符串不同类型间转换 📣📣📣📣📣📣📣📣 🎍逐梦编程,让中华屹立世界之巅。 🎍简单的事情重复做,重复的事情用心做,用心的事情坚持做; 字符串可以和类型相同的字

    2024年02月03日
    浏览(63)
  • C++ Qt开发:字符串QString容器

    在Qt框架中, QString 是一个强大而灵活的字符串容器,专为处理 Unicode 字符而设计。它提供了许多方便的方法来操作和处理字符串,使得在跨平台开发中能够轻松地进行文本操作。QString 是 Qt 开发中不可或缺的一部分,它的灵活性和强大的功能使其成为处理文本和字符串操作

    2024年02月05日
    浏览(49)
  • C++ Qt开发:StringListModel字符串列表映射组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍 QStringListModel 字符串映射组件的常用方法及灵活运用。 QStringListModel 是 Qt 中用

    2024年02月04日
    浏览(42)
  • C++中求string类型字符串长度的三种方法

    length()函数是string的内置成员方,用于返回string类型字符串的实际长度。 length()函数声明: // 返回 string 长度,单位字节 size_t length() const noexcept; 示例1: size()函数与length()一样,没有本质区别。string类刚开始只有length()函数,延续了C语言的风格。引入STL之后,为了兼容又加入

    2024年02月07日
    浏览(59)
  • C、C++、QT 中的字符串格式和处理方法

    C++ 的 C 风格字符串并没有指定特定的编码格式。它只是一个以 null 字符(’\\0’)作为结尾的字符数组,可以存储 ASCII 字符或多字节字符序列。编码格式是由使用字符串的上下文和编译器的设置来确定的。 C++ 的 C 风格字符串并没有内置的编码格式。它只是一个以 null 字符(

    2024年02月01日
    浏览(38)
  • 04-1_Qt 5.9 C++开发指南_常用界面设计组件_字符串QString

    本章主要介绍Qt中的常用界面设计组件,因为更多的是涉及如何使用,因此会强调使用,也就是更多针对实例,而对于一些细节问题,需要参考《Qt5.9 c++开发指南》进行学习。 图4-1是实例samp4_1 设计时的窗体,是基于QWidget 创建的可视化窗体。界面设计使用了布局管理,窗体上

    2024年02月13日
    浏览(69)
  • 汇编和c++初学,c++字符串加整型,导致的字符串偏移

    从汇编角度分析\\\"helloworld\\\"+1 “helloworld”+1对应 eax地址偏移加了1, 最终取的内存偏移地址,所以此时的test是elloword,后面调用iostream封装的字符串相加方法。 最终结果是 做的前端,如果是js,1会转换为字符串后相加,最近刚学c++和汇编,目前还是一知半解的,如有不对,请指

    2024年01月16日
    浏览(43)
  • C++基础容器 -- C的数组和字符串和C++的数组和字符串

    数组 概念 代表内存里一组连续的同类型存储区 可以用来把多个存储区合并成一个整体 数组声明 int arr[10]; 类型名称int表述数组里面所有元素的类型 名称arr是数组的名称 整数10表示数组里面的元素个数 数组里元素个数不可以改变 使用 每个元素都有下标,通过下标可以直接访

    2024年02月06日
    浏览(58)
  • c++读取字符串字符时出错

    这是我做的一个c++爬虫程序但是在抓取网页的时候string类型传递出现了问题 以下是图片代码  url的值是 \\\"http://desk.zol.com.cn/\\\" 我不知道为什么数据传递会出问题 请大佬指教 后面重新启动一遍编译器查一查断点有突然没问题了 ,真是个玄学的问题。我还以为是mallco出问题了

    2024年02月12日
    浏览(45)
  • c++ 字符串去除指定的字符

    使用 std::string 的 erase 和 find 方法 循环查找并擦除特定字符,逐个字符地搜索并移除字符 使用 std::remove 算法和 erase std::remove 函数可以用来移除指定的字符,并返回一个新的“逻辑”结束位置。实际的字符串内容没有改变,但所有需要保留的字符已经被移动到字符串的开始位

    2024年03月17日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包