CString、String(标准模版…
2017-06-29 10:13
204 查看
原文地址:CString、String(标准模版库)、string(C语言)区别和联系----1---5作者:蓝色的思念STring与CSTring的区别和联系
CString:MFC里面封装的类。主要应用在MFC和ATL程中
主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
动态的TCHAR数组。它是一个完全独立的类,封装了+等操作符和字符串操作方法。
String:标准模板类(STL)定义的字符串类//类似于Vector
string.h是C语言中字符串操作函数的头文件
cstring.h是c++对C语言中的strcpy之类的函数声明,包含cstring.h之后,就可以在程序中使用C语言风格的strcpy之类的函数。
转换:
CString→String
CString strMfc=_T("test");
std::string strStl ;
strStl=strMfc.GetString();
String→CString
CString strMfc;
std::string strStl="test";
strMfc=strStl.c_str();
构造
string可以从几乎所有的字符串构造而来,包括CString和char*;
CString次之,可以从基本的一些字符串变量构造而来,包括char*等;
char*没有构造函数,仅可以赋值;
eg:
char* pName = “jane”;
CString cstr( pName );
string str( cstr );
赋值
1、=
string 几乎可以直接用所有的字符串赋值,包括CString和char*;
CString 次之,可以直接用些基本的字符串赋值,包括char*等;
char*
只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针;
eg:
char *pName = NULL;
psz = new char[8]; //char
*pName = new char[8];
memset( pName, 0, 8 );
strcpy( pName, "jane");
CString cstr;
cstr = pName;
string str;
str = pName;
str = cstr;
delete []pName;
对于字符数组与CString的转换,我们需要注意
行之有效的办法
BYTE pbuffer[255]={"hello,kitty,haoareyou?"};
CString mystr(pbuffer);//通过构造函数去解决赋值问题,CString
mystr=pbuffer;是不对的
2、+
string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str +
cstr是非法的,须转换成char*;
char*没有+运算,只能使用strcat把两个指针连在一起;
eg:
char* pName = "jane";
CString cstr = pName;
cstr = cstr + pName;
string str = pName;
str = str + pName;
strcat( pName, pName);
strcat( pName, cstr
);
// 合法
strcat( pName, str
);
// 非法,由此可见,CString可自动转换为const char*,而string不行
3、+=
string
几乎可以与所有的字符串变量+=,包括CString和char*;
CString
次之,可以与基本的一些字符串变量进行+=而来,包括char*等;
char*没有+=运算符,只能使用strcat把两个指针连在一起;
4、[]
CString最好,当越界时会抛出断言异常;
string与char*下标越界结果未定义;
eg:
char* pName = "jane";
CString cstr = pName;
cout << cstr[8];
string str = psz;
cout << str[8];
cout << psz[8];
5、== 、!=、> 、< 、>=
、<=
CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;
cout
<< ( pName == cstr );
cout
<< ( pName == str );
cout
<< ( str == pName);
cout
<< ( cstr == pName );//以上代码返回均为1
CString:MFC里面封装的类。主要应用在MFC和ATL程中
主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
动态的TCHAR数组。它是一个完全独立的类,封装了+等操作符和字符串操作方法。
String:标准模板类(STL)定义的字符串类//类似于Vector
string.h是C语言中字符串操作函数的头文件
cstring.h是c++对C语言中的strcpy之类的函数声明,包含cstring.h之后,就可以在程序中使用C语言风格的strcpy之类的函数。
转换:
CString→String
CString strMfc=_T("test");
std::string strStl ;
strStl=strMfc.GetString();
String→CString
CString strMfc;
std::string strStl="test";
strMfc=strStl.c_str();
构造
string可以从几乎所有的字符串构造而来,包括CString和char*;
CString次之,可以从基本的一些字符串变量构造而来,包括char*等;
char*没有构造函数,仅可以赋值;
eg:
char* pName = “jane”;
CString cstr( pName );
string str( cstr );
赋值
1、=
string 几乎可以直接用所有的字符串赋值,包括CString和char*;
CString 次之,可以直接用些基本的字符串赋值,包括char*等;
char*
只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针;
eg:
char *pName = NULL;
psz = new char[8]; //char
*pName = new char[8];
memset( pName, 0, 8 );
strcpy( pName, "jane");
CString cstr;
cstr = pName;
string str;
str = pName;
str = cstr;
delete []pName;
对于字符数组与CString的转换,我们需要注意
行之有效的办法
BYTE pbuffer[255]={"hello,kitty,haoareyou?"};
CString mystr(pbuffer);//通过构造函数去解决赋值问题,CString
mystr=pbuffer;是不对的
2、+
string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str +
cstr是非法的,须转换成char*;
char*没有+运算,只能使用strcat把两个指针连在一起;
eg:
char* pName = "jane";
CString cstr = pName;
cstr = cstr + pName;
string str = pName;
str = str + pName;
strcat( pName, pName);
strcat( pName, cstr
);
// 合法
strcat( pName, str
);
// 非法,由此可见,CString可自动转换为const char*,而string不行
3、+=
string
几乎可以与所有的字符串变量+=,包括CString和char*;
CString
次之,可以与基本的一些字符串变量进行+=而来,包括char*等;
char*没有+=运算符,只能使用strcat把两个指针连在一起;
4、[]
CString最好,当越界时会抛出断言异常;
string与char*下标越界结果未定义;
eg:
char* pName = "jane";
CString cstr = pName;
cout << cstr[8];
string str = psz;
cout << str[8];
cout << psz[8];
5、== 、!=、> 、< 、>=
、<=
CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;
cout
<< ( pName == cstr );
cout
<< ( pName == str );
cout
<< ( str == pName);
cout
<< ( cstr == pName );//以上代码返回均为1
相关文章推荐
- 标准字符串std::string和System::String, CString之间的转换
- 标准字符串std::string和System::String, CString之间的转换
- 标准字符串std::string和System::String, CString之间的转换
- 标准字符串std::string和System::String, CString之间的转换
- 标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
- 标准字符串std::string和System::String, CString之间的转换
- 标准字符串std::string和System::String, CString之间的转换
- 使用Boost中的Format格式化标准模版库的string
- 将MFC的CString 类型转化为C++标准数据类型std::string
- 如何将xml的String字符串转化标准格式的String字符串
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- ATL::CStringT与std::basic_string
- CString和string区别
- VC之CString,wchar_t,int,string,char*之间的转换
- CString转string和char*的问题
- unicode下CString转实std::string失败问题解决
- <string> 与<string.h>、<cstring>的区别
- C++中CString,int,string,char*之间的转换
- string,CString,char*之间转换
- 标准C++类string的Copy-On-Write技术(二)