C/C++中字符串与数字转换

C++/C 字符串与数字互相转换

简介

提供字符串与数字相互转换的方法

用法

C语言:

序号

函数

描述

1

itoa()

将整型/长整型转换为字符串

2

ultoa() 

将无符号长整型值转换为字符串

3

ecvt()

将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点

4

 fcvt()

以指定位数为转换精度,余同ecvt()

5

gcvt()

将双精度浮点型值转换为字符串,转换结果中包含十进制小数点

6

atof()

将字符串转换为双精度浮点型值

7

atoi()

将字符串转换为整型值

8

atol()  

将字符串转换为长整型值

9

strtod() 

将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字

10

strtol()  

将字符串转换为长整值,并报告不能被转换的所有剩余数字

11

strtoul() 

将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字

C++:

『String类型的字符串』


这里数值和字符串相互转换的例子,使用的是stringstream函数,在c++11当中有定义好的现成的函数取调用,非常方便。

1.【字符串转换为数值】

string和数值转换 转换类型
to_string(val) 把val转换成string
stoi(s,p,b) 把字符串s从p开始转换成b进制的int
stol(s,p,b) 把字符串s从p开始转换成b进制的long
stoul(s,p,b) 把字符串s从p开始转换成b进制的unsigned long
stoll(s,p,b) 把字符串s从p开始转换成b进制的long long
stoull(s,p,b) 把字符串s从p开始转换成b进制的unsigned long long
stof(s,p) 把字符串s从p开始转换成float
stod(s,p) 把字符串s从p开始转换成double
stold(s,p) l把字符串s从p开始转换成long double

  
  
  1. #include <bits/stdc++.h>
  2. #include <map>
  3. using namespace std;
  4. int main(){
  5. string s= "222.22";
  6. cout<< "s="<<s<< endl;
  7. int a = 222;
  8. int ot = stoi(s, 0, 10);
  9. int ol = stol(s, 0, 10);
  10. float of = stof(s, 0);
  11. double od = stod(s, 0);
  12. cout<< "ot="<<ot<< endl;
  13. cout<< "ol="<<ol<< endl;
  14. cout<< "of="<<of<< endl;
  15. cout<< "od="<<od<< endl;
  16. return 0;
  17. }

 

2.【数值转换为字符串】

用stringstream即可把多种数值类型转换为String类型的字符串


  
  
  1. #include <string>
  2. #include <sstream>
  3. #include <iostream>
  4. using namespace std;
  5. int main(){
  6. double a = 123.32;
  7. string res;
  8. stringstream ss;
  9. ss << a;
  10. ss >> res; //或者 res = ss.str();
  11. cout<<res;
  12. return 0;
  13. }

『Char数组类型的字符串』


这里是使用C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字和字符串相互转换。

字符串和数值转换 作用
 atof(s) 将字符串s[n]转换为双精度浮点型值。
 atoi(s) 将字符串s[n]转换为整型值。
 atol(s) 将字符串s[n]转换为长整型值。
strtod(s,*p,b) 将字符串s[n]转换为b进制双精度浮点型值,到p停止,并报告不能被转换的所有剩余数字。
strtol(s,*p,b) 将字符串s[n]转换为b进制长整值,到p停止,并报告不能被转换的所有剩余数字。
strtoul(s,*p,b) 将字符串s[n]转换为b进制无符号长整型值,到p停止,并报告不能被转换的所有剩余数字。

  
  
  1. #include <cctype>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. int main(void ) {
  5. char s[ 100]= "1431";
  6. printf( "The number integer is %d\n",atoi(s));
  7. return 0;
  8. }

 

 


  
  
  1. #include <cstdlib>
  2. #include <cstdio>
  3. main() {
  4. double a= 123.45;
  5. double b= -1234.56;
  6. char ptr[ 50];
  7. gcvt(a, 5,ptr);
  8. printf( "a value=%s\n",ptr);
  9. gcvt(b, 6,ptr);
  10. printf( "b value=%s\n",ptr);
  11. }

      </div>

2 采用stringstream方式

头文件 #include <sstream>

用例:


  
  
  1. #include <string>
  2. #include <sstream>
  3. void NumToStr()
  4. {
  5. double num = 123.123;
  6. string str; stringstream ss;
  7. ss << num;
  8. ss >> str; //str = ss.str();
  9. }
  10. void StrToNum()
  11. {
  12. double num = 123.123;
  13. string str;
  14. stringstream ss;
  15. ss << str;
  16. ss >> num;
  17. }

2. 利用格式化输入输出

序号

函数

描述

1

sprintf

将数字转换为字符串

2

sscanf

将字符串转换为数字

用例:


  
  
  1. #include <stdio>
  2. void NumToStr()
  3. {
  4. double num = 123.123;
  5. char str[ 255];
  6. sprintf(str, "%.2f", num);
  7. }
  8. void StrToNum()
  9. {
  10. double num;
  11. char str[] = "123.123";
  12. sscanf(str, "%f", &num);
  13. }

格式符说明

转换说明

输出

%a,%A

浮点数、十六进制数和p-计数法(C99)

%c

一个字符

%d

有符号十进制数

%e,%E

浮点数,e计数法

%f

浮点数,十进制计数法

%g,%G

根据数值不同自动选择%f或%e,%e格式在指数小于-4或者大于等于精度时使用

%i

有符号十进制整数(与%d相同)

%o

无符号八进制整数

%p

指针

%s

字符串

%u

无符号十进制数

%x,%X

使用十六进制数0f的无符号十六进制整数

%%

打印一个百分号

符号

说明

示例

-

项目左对齐,即,会把项目打印在字段的左侧开始处

"%-20s"

+

有符号的值若为正,则显示带加号的符号;若为负,则显示带减号的符号

"%+6.2f"

(空格)

有符号的值若为正,则显示时带前导空格(但是不显示符号);若为负,则带减号符号,+标志会覆盖空格标志

"% 6.2f"

#

使用转换说明的可选形式。若为%o格式,则以0开始;若为%x和%X格式 ,则以0x或0X开始。对于所有的浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符。对于%g和%G格式,它防止尾随0被删除

"%#o" "%#8.0f" "%+#10.3E"

0

对于所有的数字格式,用前导零而不是空格填充字段宽度。如果出现-标志或者指定了精度(对于整数)则忽略该标志

"%010d" "%08.3f"

发布了45 篇原创文章 · 获赞 21 · 访问量 457

C++/C 字符串与数字互相转换

猜你喜欢

转载自blog.csdn.net/qq_40394960/article/details/105179479
今日推荐