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;
}