07C++数据类型相互转换.docx
- 文档编号:28478176
- 上传时间:2023-07-14
- 格式:DOCX
- 页数:33
- 大小:98.31KB
07C++数据类型相互转换.docx
《07C++数据类型相互转换.docx》由会员分享,可在线阅读,更多相关《07C++数据类型相互转换.docx(33页珍藏版)》请在冰豆网上搜索。
07C++数据类型相互转换
c++中整型和字符数组间的转化
程序目的:
实现c++整型和字符数组,字符串的相互转化
源代码:
#include
#include
usingnamespacestd;
main()
{
inti1=123,i2,i3;
floatf1;
charc1[20]="234.45",c2[20];
strings1="456",s2;
i2=atoi(c1); //作用:
将字符数组转化为整数
f1=atof(c1); //作用:
将字符数组转化为浮点型
itoa(i1,c2,10);//作用:
将整型转化为字符数组 10为10进制的意思
cout<<"字符数组转化为整型:
"< cout<<"字符数组转化为浮点型: "< cout<<"整型转化为字符数组: "< //备注: 下面这种做法还挺新鲜的~ strncpy(c2,s1.c_str(),s1.length());//作用: 字符串转化为字符数组 i3=atoi(c2); cout<<"字符串转化为整型: "< system("pause"); } 截图: 备注: cstdlib是C++里面的一个常用函数库,等价于C中的 C++中常用的头文件之一。 使用: #include 该函数主要可以提供一些函数与符号常量,具体如下: size_t,wchar_t,div_t,ldiv_t,lldiv_t 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 1、如何将CString变量转换为int变量 2、如何将int变量转换CString为变量 CString ss="1212.12"; int temp=atoi(ss); CString aa; aa.Format("%d",temp); //这在MFC中可以用,一般C++中用不了! 弄了个半天我才发现原来CString类是MFC中的一个类! ! ! ! ! ! ! ! ! ! ! 一般的C++中不能使用! 那么一般的C++程序(不是MFC程序)中,如何实现字符串和整型,浮点型数据的转换? 3、CString转换为Double 4、Double转换为CString CString strValue("1.234"); double dblValue; dblValue = atof((LPCTSTR)strValue); C风格字符串,C++string类,MFC,CString类的区别。 字符串,顾名思义是由字符组成的字符串,在标准C,标准C++,MFC中 字符串这一功能的实现是不相同的,C++完全兼容了C。 1. 标准C中的字符串 在标准C中没有string这样的数据类型,C中的字符串是有char类型的字符数组或者char类型的字符指针来实现的。 例如: char name[26]="ThisisaC-stylestring"; 或者 char *name="ThisisaC-stylestring"; 类型的字符串以\0为结束标记,所占内存是实际子符长度+1,其初始化和赋值都要逐个字符的赋值,修改不辨,粒度太小,很不直观,是程序员分散了一些软件的高级层面问题,如算法,抽象数据类型或软件构架。 char *没有构造函数,仅能由指针赋值,而且是一个极其危险的操作,在声明char* 的时候如果没有赋初值,建议先初始化为NULL,以免出现悬浮指针或者指向地址不明的指针,否则,出错会让你很爽! 标准C中是没有string类型,但是在C中有string.h头文件,需要注意的是此string.h中的string 非彼string, 2.标准C++中的string类 C++支持C风格字符串的使用,而且引入了string类的概念,string为标准模板类STL定义的字符串,几乎可以从所有的字符串构造出来。 string字符串类的都文件是 头文件 要深刻理解标准C++中string是一个类, 如在标准C中定义如下: char*pt=NULL;这无疑是正确的,但是在标准C++中定义 string *pt=NULL;这样做编译器不会有警告和错误,但是运行是就会有异常。 (备注: 这句话,有待商榷! )这是因为string作为一个类,定义类的对象时要调用其构造函数的,上面的例子既没有调用其构造函数,还把指针赋值为NULL,很明显就会出错的。 正确的 方法是是new操作符,C++中的new不同于C中的malloc,new不但会分配一块内存,还调用类的构造函数。 string*pt=new("thisisac++-stylestring"); 或者不用指针 string str;系统自动调用默认的构造函数,构造一个string类的对象。 3.MFC中的CString类。 MFC中的字符串类是CString,封装了string的东西,并增加了一些接口,在功能上完全兼容string类,而一些标准的C/C++不能直接对CString类进行操作,CString类是微软的visualc++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。 如在linux上的工程就不能用CString了,只能用标准C++中的string类了。 另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明usingnamespacestd;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。 这点看来用string类的程序的移植性更好。 CString和string提供的接口方法不同,对char*的转换也不同。 下面的转换内容来自CSDNBLOG: 4.1CString和string的转换 Stringstr="ksarea"; CStringcstr(str.c_str());//或者CStringcstr(str.data());一种初始化变量的方法,不用”=” cstr=str.c_str();或者cstr=str.data(); //备注: GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. str=cstr.GetBuffer(0); //CString->string 由于format函数的第二个参数要求char*类型,因而要用函数c_str()或者data() cstr.format("%s", str.c_str()); //string->CString cstr.format("%s", str.data()); //string->CString str = LPCSTR(cstr); //CString->string /*c_str()和data()区别是: 前者返回带'/0'的字符串,后者则返回不带'/0'的字符串*/ 《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1、data(),返回没有”\0“的字符串数组 2、c_str(),返回有”\0“的字符串数组 3、copy() 4.2CString和数值类型,如int类型、float类型、double类型的转换 Inti=123; CStringstr; str.format("%d",i);//int->CString 其他的基本数值类型如: float类型等转化类似,仅仅是%f的区别 i=atoi(str);//CString->int 还有(atof,atol) 4.3char*和CString的转换 CStringcstr="ksarea"; //备注: GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. char* ptemp=cstr.getbuffer(0); char* str; strcpy(str,ptemp);//CString->char* cstr.releasebuffer(-1); char*str="lovesha"; CStringcstr=str;//char*->CString string类型不能直接赋值给CString。 至于int与float、string与char*之间的转化可以使用强制转化,或者标准库函数进行。 对于CString与其他类型的转化方法很多,但其实都殊途同归,朝着一个方向即将类型首先转化为char*类型,因为char*是不同类型之间的桥梁。 得到char*类型,转化为其他类型就非常容易了。 这篇文章: ,还不错,主要讲述CString和string的区别,感兴趣的可以去瞅一下。 《〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈 下面介绍介个不同数据类型间转化的函数: (1)atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。 返回值 返回转换后的浮点型数。 附加说明 atof()与使用strtod(nptr,(char**)NULL)结果相同。 (2)atoi(将字符串转换成整型数) 相关函数 atof,atol,atrtod,strtol,strtoul 表头文件 #include 定义函数 int atoi(const char *nptr); 函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 返回值 返回转换后的整型数。 附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。 (3)atol(将字符串转换成长整型数) 相关函数 atof,atoi,strtod,strtol,strtoul 表头文件 #include 定义函数 long atol(const char *nptr); 函数说明 atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。 返回值 返回转换后的长整型数。 附加说明 atol()与使用strtol(nptr,(char**)NULL,10);结果相同。 (5)strtod(将字符串转换成浮点数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include 定义函数 double strtod(const char *nptr,char **endptr); 函数说明 strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。 若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。 参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。 如123.456或123e-2。 返回值 返回转换后的浮点型数。 (6)strtol(将字符串转换成长整型数) 相关函数 atof,atoi,atol,strtod,strtoul 表头文件 #include 定义函数 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指定的转换字符串超出合法范围。 (7)strtoul(将字符串转换成无符号长整型数) 相关函数 atof,atoi,atol,strtod,strtol 表头文件 #include 定义函数 unsigned long int strtoul(const char *nptr,char **endptr,int base); 函数说明 strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。 参数base范围从2至36,或0。 参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。 当base值为0时则是采用10进制做转换,但遇到如'0x'前置字符则会使用16进制做转换。 一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。 若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。 返回值 返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。 附加说明 ERANGE指定的转换字符串超出合法范围。 (8)toascii(将整型数转换成合法的ASCII 码字符) 相关函数 isascii,toupper,tolower 表头文件 #include 定义函数 int toascii(int c) 函数说明 toascii()会将参数c转换成7位的unsigned char值,第八位则会被清除,此字符即会被转成ASCII码字符。 返回值 将转换成功的ASCII码字符值返回。 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 二、标准C++中将string类型转换为-”数值类型int,float,double类型“主要通过以下几种方式: (并非MFC程序中! ) #方法一: 使用stringstream stringstream在int或float类型转换为string类型的方法中已经介绍过,这里也能用作将string类型转换为常用的数值类型。 Demo: 1.#include 2.#include 3.using namespace std; 4. 5.//模板函数: 将string类型变量转换为常用的数值类型(此方法具有普遍适用性) 6.template 7.Type stringToNum(const string& str) //注意这里的Type指的是数据类型 8.{ //如: INT,DOUBLE等,例如下面调用语句! 9. istringstream iss(str); //第18行: stringToNum 10. Type num; //Type此时指代数据类型int型 11. iss >> num; 12. return num; 13.} 14. 15.int main(int argc, char* argv[]) 16.{ 17. string str("00801"); 18. cout << stringToNum 19. 20. system("pause"); 21. return 0; 22.} #include #include usingnamespacestd; //模板函数: 将string类型变量转换为常用的数值类型(此方法具有普遍适用性) template TypestringToNum(conststring&str) { istringstreamiss(str); Typenum; iss>>num; returnnum; } intmain(intargc,char*argv[]) { stringstr("00801"); cout< system("pause"); return0; } 输出结果: 801 请按任意键继续... 小理解: 方法一中用的是模板函数,表面上看起来似乎不好理解,其实将数据类型从string转化为int、double、float原理很简单! stringstream strStream; //定义一个字符串流对象 strings1=”123”; strings2=”345.987”; inta; floatb; strStream< strStream>>a; strStream.clear(); strStream< strStream>>b; 注意: 代码中,我用到了clear()这个函数,这个函数的解释见下一篇文章! 我只能说,这个函数是用来清除流对象的错误标识的,很重要! #方法二: 使用atoi()、atil()、atof()函数 -----------------实际上是char类型向数值类型的转换 注意: 使用atoi的话,如果strings为空,返回值为0.则无法判断s是0还是空 1.atoi(): 原型: intatoi(constchar*str); 说明: ParsestheCstringstrinterpretingitscontentasanintegralnumber,whichisreturnedasanintvalue. 参数: str: Cstringbeginningwiththerepresentationofanintegralnumber. 返回值: 1.成功转换显示一个Int类型的值. 2.不可转换的字符串返回0. 3.如果转换后缓冲区溢出,返回INT_MAXorINT_MIN Demo: 1.#include 2.using namespace std; 3.int main () 4.{ 5. int i; 6. char szInput [256]; 7. cout<<"Enter a number: "< 8. fgets ( szInput, 256, stdin ); 9. i = atoi (szInput); 10. cout<<"The value entered is : "< 11. cout<<" The number convert is: "< 12. return 0; 13.} #include usingnamespacestd; intmain() { inti; charszInput[256]; cout<<"Enteranumber: "< fgets(szInput,256,stdin); i=atoi(szInput); cout<<"Thevalueenteredis: "< cout<<"Thenumberconvertis: "< return0; } 输出: Enteranumber: 48 Thevalueenteredis: 48 Thenumberconvertis:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 07 C+ 数据类型 相互 转换