CString/string/char*/char[]/int/float相互转化

来源:互联网 发布:linux 查看死机原因 编辑:程序博客网 时间:2024/06/10 19:53
利用MFC,我对话框中利用GetWindowText得到的字符串是CString型,CString是属于MFC的而一些C/C++函数是不能直接CString行操作的,所以我们经常遇到将CStringchar*等等其他数据型的情况。总结备忘于此!
首先要明确,C中是不存在string型的,stringC++充字符串操作的一个。但是我知道C中有string.h文件,里要区分清楚,此string非彼stringstring.h文件中定了一些我们经常用到的操作字符串的函数,如:strcpystrcatstrcmp等等,但是些函数的操作象都是char*指向的字符串。 而C++string操作象是string型字符串,该类重装了一些运算符,添加了一些字符串操作成函数,使得操作字符串更加方便。有的候我要将string串和char*串配合使用,所以也会涉及到两个型的问题
1.CString和string的
stringstr="ksarea";
CStringcstr(str.c_str());//或者CString cstr(str.data());初始化才行
cstr=str.c_str();或者cstr=str.data();
str=cstr.GetBuffer(0);//CString -> string
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'的字符串*/
2.CString和int的转换
inti=123;
CStringstr;
str.format("%d",i);//int->CString
其他的基本
i=atoi(str);//CString->int有(atof,atol)
3.char*和CString的转换
CStringcstr="ksarea";
char* ptemp=cstr.getbuffer(0);
char* str;
strcpy(str,ptemp);//CString->char*
cstr.releasebuffer(-1);

char*str="lovesha";
CStringcstr=str;//char*->CString string
型不能直接赋值给CString
至于intfloatstringchar*化可以使用化,或者函数行。CString与其他型的化方法很多,但其都殊途同,朝着一个方向即将型首先char*型,因char*是不同型之梁。得到char*型,其他型就非常容易了。
常用算法
a)      

作用
char*
string
CString
找指定
strchr
strstr
strrstr
strspn
find
Find
第一个匹配的
 
fild_first_of
FindOneOf
从后面开始
 
 
ReserveFind
指定匹配方式
 
find_if
 

注:find_if中是把范内的挨个代入匹配函数直至返回true
b)     

作用
char*
string
CString
找指定(区分大小写)
strcmp
strncmp
strcoll
_strncoll
operator<
operator>
operator<=
operator>=
operator==
operator!=
Collate
Compare
找指定(不区分大小写)
_stricmp
_strnicmp
_stricoll
_strnicoll
 
CollateNoCase
CompareNoCase

注:返回如果<0前面的小于后面的,反之亦然
c)     

作用
char*
string
CString
找指定
_strset
_strnset
replace
replace_copy
replace_copy_if
replace_if
Replace

d)     插入

作用
char*
string
CString
找指定
 
insert
Insert