简介
提供字符串与数字相互转换的方法
用法
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++:
这里数值和字符串相互转换的例子,使用的是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 |
-
#include <bits/stdc++.h>
-
#include <map>
-
using
namespace
std;
-
int main(){
-
string s=
"222.22";
-
cout<<
"s="<<s<<
endl;
-
int a =
222;
-
int ot = stoi(s,
0,
10);
-
int ol = stol(s,
0,
10);
-
float of = stof(s,
0);
-
double od = stod(s,
0);
-
cout<<
"ot="<<ot<<
endl;
-
cout<<
"ol="<<ol<<
endl;
-
cout<<
"of="<<of<<
endl;
-
cout<<
"od="<<od<<
endl;
-
return
0;
-
}
2.【数值转换为字符串】
用stringstream即可把多种数值类型转换为String类型的字符串
-
#include <string>
-
#include <sstream>
-
#include <iostream>
-
using
namespace
std;
-
int main(){
-
double a =
123.32;
-
string res;
-
stringstream ss;
-
ss << a;
-
ss >> res;
//或者 res = ss.str();
-
cout<<res;
-
return
0;
-
}
『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停止,并报告不能被转换的所有剩余数字。 |
-
#include <cctype>
-
#include <cstdio>
-
#include <cstdlib>
-
int main(void ) {
-
char s[
100]=
"1431";
-
printf(
"The number integer is %d\n",atoi(s));
-
return
0;
-
}
-
#include <cstdlib>
-
#include <cstdio>
-
main() {
-
double a=
123.45;
-
double b=
-1234.56;
-
char ptr[
50];
-
gcvt(a,
5,ptr);
-
printf(
"a value=%s\n",ptr);
-
gcvt(b,
6,ptr);
-
printf(
"b value=%s\n",ptr);
-
}
</div>
2 采用stringstream方式
头文件 #include <sstream>
用例:
-
#include <string>
-
#include <sstream>
-
-
void NumToStr()
-
{
-
double num =
123.123;
-
string str;
stringstream ss;
-
ss << num;
-
ss >> str;
//str = ss.str();
-
}
-
-
void StrToNum()
-
{
-
double num =
123.123;
-
string str;
-
stringstream ss;
-
ss << str;
-
ss >> num;
-
}
2. 利用格式化输入输出
序号 |
函数 |
描述 |
1 |
sprintf |
将数字转换为字符串 |
2 |
sscanf |
将字符串转换为数字 |
用例:
-
#include <stdio>
-
-
void NumToStr()
-
{
-
double num =
123.123;
-
char str[
255];
-
sprintf(str,
"%.2f", num);
-
}
-
void StrToNum()
-
{
-
double num;
-
char str[] =
"123.123";
-
sscanf(str,
"%f", &num);
-
}
格式符说明
转换说明 |
输出 |
%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" |