一、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. 利用位运算实现
注意:该方法仅限于单个字符与数字间的转化(字符串不易操作,复杂度较高,并不适合作为字符与数字的转化的算法使用)文章来源:https://www.toymoban.com/news/detail-736198.html
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模板网!