作者:最棒小小丫_635 | 来源:互联网 | 2024-11-30 06:10
一.介绍
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;
CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(Unicode),TCHAR(ANSI与unicode均可);
char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;
二.赋值以及构造
//这里使用了一个console控制台程序作为实验
编译环境:xp32系统 vs2005英文版
#include
#include
#include //在非MFC程序下使用CString类必须加的头文件
#include
using namespace std;
int main(void)
{
//赋值和构造
char *ch = "Hello World!";
CString cstr(ch); //等价于:CString cstr = "Hello World!"; CString("HelloWorld!");
string str(ch); //等价于:string str = "Hello World!"; string str("Hello World!");
string str(cstr); //需设置Use Multi-Byte Character Set属性
cout<<"char* : "<
cout<<"string : "< cout<<"string : "< //c_str()函数:将内容以C_string返回
wcout<<"CString : "< //wcout输出宽字节
wcout<<"CString : "< wcout<<"CString : "<
system("pause");
return 0;
}
在这里 ch是一个字符串指针&#xff0c;自然就没有构造函数&#xff0c;字节赋值就是了&#xff0c;CString和string都是一个类&#xff0c;有构造函数&#xff0c;可以使用基本的字符串构造&#xff0c;包括char *;
Ps:在Win32控制台&#xff08;console&#xff09;程序下使用CString有两种方法&#xff0c;第一种&#xff1a;直接添加头文件#include ,第二种&#xff1a;在solution标签页&#xff0c;右键工程名&#xff0c;选择properties,
弹出text property pages界面&#xff0c;如下图&#xff0c;选择General&#xff0c;在Use of MFC的后面选择 use MFC in a Shared DLL.如下图
如果你使用的是VC&#43;&#43;6.0&#xff0c;你可以在菜单栏的 工程->设置中找到此选项。
做完这些后&#xff0c;你还要在程序的前面添加两个头文件&#xff0c;#include #include 。注意&#xff1a;你必须让#include 在#include 的前面&#xff0c;这样你就能在程序中使用CString这个类了。
是时候输出来比较下了&#xff0c;在vs默认情况下&#xff0c;使用的是unicode&#xff0c;它在计算机中无论什么时候都是16位的&#xff0c;char *和string都可以用cout直接的输出&#xff0c;但是直接cout CString会出错&#xff0c;你可以在 text property pages界面Character Set 属性中选择Use Multi-Byte Character Set&#xff08;如果你选择了此选项&#xff0c;你可以使用CString类直接够着string&#xff09;。或者你也可以使用wcout&#xff0c;实例中使用了这个方法。
3.运算符重载
&#xff08;1&#xff09;&#xff1a;operator&#61;
我们还是以实例来说明
#include
#include //在非MFC程序下使用CString类必须加的头文件
#include
using namespace std;
int main(void)
{
char *ch &#61; "Hello World!";
CString cstr &#61; ch;
string str &#61; cstr; //同样要设置Use Multi-Byte Character Set属性
cout<<"char* : "< cout<<"string : "< cout<<"string : "< wcout<<"CString : "< //wcout输出宽字节
wcout<<"CString : "< wcout<<"CString : "< system("pause");
return 0;
}
可以看出&#xff0c;最方便的是string &#xff0c;可以用CString和char*直接赋值&#xff1b;
其次是CString&#xff0c;可以用char*赋值&#xff1b;
Char*只是一个指针赋值。
&#xff08;2&#xff09;operator&#43;
我们再来看看重载的&#43;
#include
#include //在非MFC程序下使用CString类必须加的头文件
#include
using namespace std;
int main(void)
{
char *ch &#61; "Hello World!";
CString cstr &#61; ch;
string str &#61; cstr;
string str2 &#61; str&#43;ch; //string &#43; char *
CString cstr2 &#61; cstr &#43; ch;//CString &#43; char *
char *ch2 &#61; new char[20];
ZeroMemory(ch2,20);
strcat(ch2,ch);
cout<<"char* : "< cout<<"char2* : "<
cout<<"string : "< cout<<"string2 : "<
wcout<<"CString : "< //wcout输出宽字节
wcout<<"CString2 : "< system("pause");
return 0;
}
首先char*没有&#43;运算&#xff0c;它们之间要连接的话可以用strcat函数。
CString和string都可以和char*进行&#43;运算&#xff0c;但是CString和string之间不能 CString cs &#61; str&#43;cstr和string st &#61; str&#43;cstr都是错误的。
&#xff08;3&#xff09;operator&#43;
#include
#include //在非MFC程序下使用CString类必须加的头文件
#include
using namespace std;
int main(void)
{
char *ch &#61; "Hello World!";
CString cstr &#61; ch;
string str &#61; cstr;
string str2 &#61; ch; //string &#43; char *
str2&#43;&#61;ch;
str2&#43;&#61;cstr;
CString cstr2 &#61; cstr &#43; ch;//CString &#43; char *
cstr2&#43;&#61;ch;
cout<<"char* : "< cout<<"string : "< cout<<"string2 : "<
wcout<<"CString : "< //wcout输出宽字节
wcout<<"CString2 : "< system("pause");
return 0;
}
CString和string都可以和char*进行&#43;&#61;运算
String可以和CString进行&#43;&#61;运算&#xff0c;但是CString&#43;&#61;string就不行
另外string和string之间可以&#43;&#61;运算&#xff0c;CString和CString之间也是可以的。
Char*之间是没有&#43;&#61;运算的&#xff0c;strcat可以实现同样的功能。
&#xff08;4&#xff09;operator []
#include
#include //在非MFC程序下使用CString类必须加的头文件
#include
using namespace std;
int main(void)
{
char *ch &#61; "Hello World!";
CString cstr &#61; ch;
string str &#61; cstr;
cout<<"char* : "<
cout<<"string : "< wcout<<"CString : "< //wcout输出宽字节
system("pause");
return 0;
}
都可以使用[]&#xff1b;但是要注意不要越界。越界会发生很严重的错误。
&#xff08;4&#xff09;比较
#include
#include //在非MFC程序下使用CString类必须加的头文件
#include
using namespace std;
int main(void)
{
char *ch &#61; "Hello World!";
CString cstr &#61; ch;
string str &#61; cstr;
char *ch2 &#61; "Hellr World!";
cout<<"Result: "<<(ch&#61;&#61;str)< cout<<"Result: "<<(cstr&#61;&#61;ch)< cout<<"Result: "<<(cstr&#61;&#61;ch2)< system("pause");
return 0;
}
CString与string之间不可以进行比较&#xff0c;但均可以与char*进行比较&#xff0c;并且比较的是值&#xff0c;而不是地址。比较成功&#xff0c;结果返回1或者是0。
三&#xff0e;转换
string 转 CString
CString.format(”%s”, string.c_str());
char 转 CString
CString.format(”%s”, char*);
char 转 string
string s(char *);
string 转 char *
char *p &#61; string.c_str();
CString 转 string
string s(CString.GetBuffer());