您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: