热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

char*CStringstring区别

一.介绍string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C标准之中

一.介绍

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());


推荐阅读
  • A题简单判断#includeusingnamespacestd;typedeflonglongll;intt;intmain(){cint;whil ... [详细]
  • 导读上一篇讲了zsh的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf的使用等等。其中很多内容没有必要记忆,作为手册参 ... [详细]
  • 题目概述:给定一个数组,计算其中所有连续子序列中平均值不低于给定值k的数量。通过将每个元素减去k并计算前缀和,问题转化为二维数点问题。此问题可以通过离线处理,利用树状数组来高效解决。 ... [详细]
  • 本文介绍了一个基于 div 标签设计的宿舍管理系统登录页面,包括用户身份选择、记住我功能以及错误信息提示。 ... [详细]
  • scrapyredis分布式爬虫 ... [详细]
  • 本文档提供了几个经典的Java编程示例,包括多线程处理、基本程序结构以及简单的逻辑运算,旨在帮助初学者更好地理解和掌握Java语言的核心特性。 ... [详细]
  • 本文探讨了如何利用自定义URI方案和注册表编辑,在Windows操作系统中实现从Web浏览器启动本地应用程序的方法,同时强调了这一过程中的安全考虑。 ... [详细]
  • 本文详细探讨了字符编码的发展历程,从最早的8位字节编码到现代的UNICODE和UTF8,解释了各种编码方式的原理及其在不同场景下的应用。 ... [详细]
  • C++编程基础:探索自定义数据类型
    本文继续深入C++编程的基础知识,重点讲解自定义数据类型的概念及其应用,包括枚举类型、结构体和联合体等。 ... [详细]
  • 本文探讨如何使用C语言开发一个座位分配系统,包括飞机座位选择、考场座位随机分配等功能,并提供了详细的代码示例。 ... [详细]
  • Flutter 高德地图插件使用指南
    本文档详细介绍了如何在Flutter项目中集成和使用高德地图插件,包括安装、配置及基本使用方法。 ... [详细]
  • WorldWind源代码解析:瓦片调度机制详解
    本文深入探讨了WorldWind项目中的关键组件——瓦片调度策略。通过源代码分析,我们将了解摄像头移动时如何动态调整瓦片的加载与卸载,确保地图渲染的高效与流畅。 ... [详细]
  • 本文介绍了Windows驱动开发的基础知识,包括WDF(Windows Driver Framework)和WDK(Windows Driver Kit)的概念及其重要特性,旨在帮助开发者更好地理解和利用这些工具来简化驱动开发过程。 ... [详细]
  • 探讨了一个关于Windows C++开发中遇到的乱码问题,特别是在处理宽字符时出现的情况。本文通过一个具体的示例——一个简单的窗口应用程序,展示了如何正确地使用宽字符以避免乱码。 ... [详细]
  • java学习日记对JFrame的操作
    设置背景图片、添加音乐、监控键盘、改变字体风格等等!importjava.applet.Applet;importjava.applet.AudioClip;importjava. ... [详细]
author-avatar
最棒小小丫_635
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有