数字和字符串的转换(转)

本文介绍了多种将浮点数转换为字符串及反之的方法,包括gcvt、ecvt、fcvt、strtod、atof等函数的使用方法与示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、gcvt(将浮点型数转换为字符串,取四舍五入)
定义函数:
char *gcvt(double number,size_t ndigits,char *buf);
-------------------------------------------
函数说明:
gcvt()用来将参数number转换成ASCII码字符串,
参数ndigits表示显示的位数。gcvt()与ecvt()
和fcvt()不同的地方在于,gcvt()所转换后的字
符串包含小数点或正负符号。若转换成功,转换
后的字符串会放在参数buf指针所指的空间。
-------------------------------------------
返回值:返回一字符串指针,此地址即为buf指针。

#include<iostream>
using namespace std;
int main(void)
{
char str[5];
double num=9.876;
int sig=5 ;   //significant digits
gcvt(num, sig, str);
cout<<str<<endl;

num=-123.4567;
gcvt(num,sig,str); //四舍五入
cout<<str<<endl;

num=0.678e5;
gcvt(num,sig,str); //位数不够时会出错
cout<<str<<endl;
return 0;
}

 

2、char* ecvt(value, ndig, &dec, &sign); 将浮点型数转换为字符串
#include<iostream>
using namespace std;
int main(void)
{
   char *string;
   double value=9.876;
   int dec, sign;
   int ndig;
   //positive
   ndig=4;
   //value为所有数字的简单罗列;dec为整数位数(科学计数0.XXXX后面的E值);sign为数值位(0正1负)
string=ecvt(value, ndig, &dec, &sign);
cout<<string<<" "<<dec<<" "<<sign<<" "<<endl;
   //negative
ndig=6;
   value=-123.450;
   string=ecvt(value,ndig,&dec,&sign);
cout<<string<<" "<<dec<<" "<<sign<<" "<<endl;
   //scientific notation
   ndig=4;
   value=6.678e5;
   string=ecvt(value, ndig,&dec,&sign);
   cout<<string<<" "<<dec<<" "<<sign<<" "<<endl;
   return 0;
}

3、double strtod(const char *nptr,char **endptr)将字符串转换成浮点数

函数说明:strtod()会扫描参数nptr字符串,跳过前面的空格字符,
直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束
时('/0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇
到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符
串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。

返回值:返回转换后的浮点型数。

#include<iostream>
using namespace std;
int main()
{
char *string,*stopstring;
   double x;
long l;
    cout.precision(10);

    string = "3.1415926abcd";
    x = strtod( string,&stopstring ); //第二个参数为**
    cout<<x<<"    "<<stopstring<<endl;

    string = "-1aThis is stoped";
    l = strtol( string, &stopstring, 10 ); //将数字看成10进制,结果用10进制表示
cout<<l<<"   "<<stopstring<<endl;

   l = strtol( string, &stopstring, 2); //将数字看成2进制,结果用10进制表示
cout<<l<<"   "<<stopstring<<endl;

l = strtol( string, &stopstring, 16); //将数字看成16进制,结果用10进制表示
   cout<<l<<"   "<<stopstring<<endl;
   return 0;
}

 

4、字符串转换为数字
double atof(const char *nptr);
int atoi(const char *nptr);
long atol(const char *nptr);

--------------------------------------------------------
函数说明
atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇
上数字或正负符号才开始做转换,而再遇到非数字或字符串结
束时('/0')才结束转换,并将结果返回。参数nptr字符串可包
含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
atoi,atol与此类似,不再重复。
--------------------------------------------------------
返回值:返回转换后的浮点型数。
附加说明:atof()与使用strtod(nptr,(char**)NULL)结果相同。
*/
#include<iostream>
using namespace std;
int main()
{
char *a="-100.11";
char *b="+200e-2";
float c1;
c1=atof(a)+atof(b);
cout<<c1<<endl;

a="-100";
b="456";
int c2=atoi(a)+atoi(b);
cout<<c2<<endl;

a="700000000";
b="700000000";
long c3=atol(a)+atol(b);
cout<<c3<<endl;
return 0;
}


5、数字转换成字符串
itoa(int i, char str[], int base)

#include<iostream>
using namespace std;
int main()
{
int i=11;
long l=100000000;// ltoa
unsigned long=1234567890; //utoa
char str[20];
itoa(i,str,16); //the third parameter is radix of each digit
cout<<str<<endl;
itoa(i,str,2);
cout<<str<<endl;
itoa(i,str,10);
cout<<str<<endl;
return 0;
}   //学以致用:JOJ1006

 

6、long int strtol(const char *nptr,char **endptr,int base);
函数说明:
strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参数base代表采用的进制方式,如 base值为10则采用10进制,若base值为16则采用16进制等。当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用 16进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束 时('/0')结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。
返回值:返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明:ERANGE指定的转换字符串超出合法范围。

main()
{
char a[]=”1000000000”;
char b[]=”1000000000”;
char c[]=”ffff”;
printf(“a=%d/n”,strtol(a,NULL,10));
printf(“b=%d/n”,strtol(b,NULL,2));
printf(“c=%d/n”,strtol(c,NULL,16));
}
执行
a=1000000000
b=512
c=65535


7、/*定义函数:
int tolower(int c); int toupper(int c);
函数说明:若参数c为大写(小写)字母则将该对应的小写(大写)字母返回。
返回值: 返回转换后的小写字母,若不须转换则将参数c值返回
*/
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str="aBcDeFgH12345;!#$";
int i;
cout<<"before: "<<str<<endl;
for(i=0;i<str.size();i++) str[i]=tolower(str[i]);
cout<<"after tolower(): "<<str<<endl;

for(i=0;i<str.size();i++) str[i]=toupper(str[i]);
cout<<"after toupper(): "<<str<<endl;

return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值