利用MFC
进
行
编
程
时
,我
们
从
对话
框中利用GetWindowText得到的字符串是CString
类
型,CString是属于MFC的
类
。
而一些
标
准
C/C++
库
函数是不能直接
对
CString
类
型
进
行操作的,所以我
们经
常遇到将
CString
类
型
转
化
char*
等等其他数据
类
型的情况。
这
里
总结备
忘于此!
首先要明确,
标
准
C
中是不存在
string
类
型的,
string
是
标
准
C++
扩
充字符串操作的一个
类
。但是我
们
知道
标
准
C
中有
string.h
这
个
头
文件,
这
里要区分清楚,此
string
非彼
string
。
string.h
这
个
头
文件中定
义
了一些我
们经
常用到的操作字符串的函数,如:
strcpy
、
strcat
、
strcmp
等等,但是
这
些函数的操作
对
象都是
char*
指向的字符串。 而
C++
的
string
类
操作
对
象是
string
类
型字符串,
该类
重装了一些运算符,添加了一些字符串操作成
员
函数,使得操作字符串更加方便。有的
时
候我
们
要将
string
串和
char*
串配合使用,所以也会涉及到
这
两个
类
型的
转
化
问题
。
1.CString和string的转化
1.CString和string的转化
string
str
=
"
ksarea
"
;
CString cstr ( 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' 的字符串*/
CString cstr ( 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)
CStringstr;
str.format("%d",i);//int->CString 其他的基本 类 型 转 化 类 似
i = atoi ( str ) ; //CString->int 还 有(atof,atol)
3.char*和CString的转换
CString
cstr
=
"
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
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*
类
型,
转
化
为
其他
类
型就非常容易了。
常用算法
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
|