1.C语言库函数atio(),itoa()
使用atio()和itoa()及相关函数,需包含库文件stdlib.h。
1.1 atoi()—将字符串转换成整型。
函数原型:
int atoi(char * nptr);
函数说明:扫描参数nptr字符串,跳过其前面的字符,直到遇到数字或正负号开始进行转换,遇到非数字或字符串结束时(‘\0’)结束转换。返回int性数值。
注意:输入str的范围不要超出int类型的范围
示例:
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a;
char str1="123";
char str2="456";
a=atoi(str1)+atoi(str2);
printf("%d",a);//输出结果为 579
}
相关函数:
atof—ascii to float–字符串转换成浮点型
atol—ascii to long—字符串转换成长整形
strtod—字符串转换成浮点型
strtol—字符串转换成长整形
strtoul–字符串转换成无符号长整形
1.2 itoa—将整形转换成字符串
函数原型:
char *itoa( int value, char *string,int radix);
函数说明:
value:要转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等,范围必须在 2-36。
注意:itoa不是一个标准的c函数,他是windows特有的,跨平台写程序,要用sprintf。
示例:
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a=123;
char *str;
str=itoa(a);
printf("%s",str);//输出结果为 123
}
在C++中应用itoa()
#include<iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a=3;
string str,str1;
str="liya本周迟到"+itoa(a)+"次。";
cout<<str<<endl;//输出结果为 liya本周迟到3次
cout<<"今天星期"<<a<<endl;//输出 今天星期3;
//当然也可以直接利用cout和fstream实现字符串和数值的直接连接,但这种方式只能直接输出到屏幕或文件中,若想要将字符串和数值直接连接的结果存储到变量中,需采用上述方式
}
相关函数:
gcvt—浮点型转换成字符串(四舍五入)
char *gcvt(double number, size_t ndigits, char *buf);
函数说明:
value:待转换的浮点数。
ndigit:存储的有效数字位数。
返回值:char*:指向生成的字符串。
gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf 指针所指的间。
ecvt—将双精度浮点型数转换为字符串,转换结果中不包括十进制小数点。
char *Ecvt(double value, int ndigit, int *decpt, int *sign);
函数说明:
*decpt:存储的小数点位置。
*sign:转换的数的符号。
只有数字才存储在该字符串中,小数点位置和value符号在调用之后从decpt和sign获取。
fcvt—把一个浮点数转换为字符串
*fcvt(double value, int ndigit, int *decpt, int *sign);
函数说明:
*decpt表示小数点的位置;
*sign表示符号,0为正数,1为负数。
2.sprintf(),sscanf()函数
使用sprintf()和sscanf()函数,需添加stdio头文件。
2.1 sprintf()
sprintf可以将任意数字包括小数点(.)和负号(-)转换成字符串。
sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。
sprintf()是个变参函数,函数原型如下:
int sprintf( char *buffer, const char *format [, argument] ... );
函数说明:
*buffer 存储转换后的字符串
*formate 格式化字符串
argument 变量列表
格式化字符串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。并存储在buffer中。
使用示例:
#include<stdio.h>
#include<stdlib.h>
int main()
{
sprintf(s, "%d", 123); 把整数123打印成一个字符串保存在s中。,产生"123"
char a[100],e[100]="-";
int b=132,c=168;
sprintf(a,"%d.%d",b,c);//将两个整数连接成一个小数存储,a中存储“132.168”
//浮点数的打印和格式控制
sprintf(s, "%10.3f", 3.1415626);//产生:" 3.142"
return 0;
}
题外话:利用sprinf()还可以用来连接两个字符串(以‘\0’结尾),如下:
char* who = "I";
char* whom = "CSDN";
sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "
但要注意,当使用sprintf()直接连接两段字符缓冲区(比如许多从第三方库函数中返回的字符数组,从硬件或者网络传输中读进来的字符流),他们并不是以’/0’结尾,就会导致非法内存操作。要采用如下方式进行连接:
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(s, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
2.2 sscanf()
用来将字符串转换为数值。
函数原型:
int sscanf( char *buffer, const char *format [, argument] ... );
3. 利用stringstream
定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。可以利用stringstream类方便的进行数据类型转换。
(1) 数值转换成字符串
#include<sstream>
#include<string>
using namespace std;
int main()
{
double a=123.45;
string res;
stringstream ss;
ss<<a;//将数字a转化成流ss
ss>>res;//将流ss转换成字符串
}
(2)字符串转换成数值
#include<sstream>
#include<string>
using namespace std;
int main()
{
double b;
string str="43.28";
stringstream ss;
ss<<str;//将字符串转化成流ss
ss>>b;//将流ss转换成数值b
}
4. c++11的to_string
函数原型:
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
功能:
将数值
转化为字符串。返回对应的字符串。
示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string pi = "pi is " + to_string(3.1415926);
string prime = to_string(2) + " is a prime number";
cout << pi << '\n';
cout << prime << '\n';
return 0;
}
参考资料:
https://www.cnblogs.com/ralap7/p/9171613.html
https://blog.csdn.net/steedhorse/article/details/330206