CString/string/char *比较详解

C++学习——CString,char * ,string的相互转换 CString头文件#include <afx.h> string头文件#include <string.h> 1、CString转char * CString cstr; char *p =(LPSTR)(LPCTSTR)cstr; 2、string转 CString CString.format(”%s”, string.c_str()); 用c_str()确实比dat... 阅读详情
(一)  概述
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'为结束标志;
(二)  构造
      string是方便的,可以从几乎所有的字符串构造而来,包括CString和char*;
       CString次之,可以从基本的一些字符串变量构造而来,包括char*等;
       char*没有构造函数,仅可以赋值;
       举例:
char* psz = “joise”;
CString cstr( psz );
string str( cstr );
(三)  运算符重载
a)       operator=
       string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;
       CString次之,可以直接用些基本的字符串赋值,包括char*等;
       char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针;
       举例:
char *psz = NULL;
psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样
memset( psz, 0, 10 );
strcpy( psz, “joise” ); 
CString cstr;
cstr = psz;
string str;
str = psz;
str = cstr;
delete []psz;
b)          operator+
       string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str + cstr是非法的,须转换成char*;
       char*没有+运算,只能使用strcat把两个指针连在一起;
       举例:
char* psz = “joise”;
CString cstr = psz;
cstr = cstr + psz;
string str = psz;
str = str + str + psz;
strcat( psz, psz );
strcat( psz, cstr );//合法
strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行
c)      operator +=
       string是最强大的,几乎可以与所有的字符串变量+=,包括CString和char*;
       CString次之,可以与基本的一些字符串变量进行+=而来,包括char*等;
       char*没有+=运算符,只能使用strcat把两个指针连在一起;
d)      operator[]
   CString最好,当越界时会抛出断言异常;
   string与char*下标越界结果未定义;
       举例:
char* psz = “joise”;
CString cstr = psz;
cout << cstr[8];
string str = psz;
cout << str[8];
cout << psz[8];
e)       operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=
       CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;
      cout << ( psz == cstr );
      cout << ( psz == str );
      cout << ( str == psz );
      cout << ( cstr == psz );//以上代码返回均为1
(四)  常用算法
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 






e)       增加
作用 char* string CString 
动态增加值 strcat push
append Append
AppendChar
AppendFormat 


f)      截取
作用 char* string CString 
得到部分值 用下标操作 substr Left
Mid
Right
Truncate 


g)      移除
作用 char* string CString 
移除部份值   remove Remove 
移除空白值 RemoveBlanks
注:此为ATL提供,非C函数 remove_if Trim
TrimLeft
TrimRigth 


h)      转换大小写
作用 char* string CString 
转换大小写 _strlwr
_strupr   MakeLower
MakeUpper 


i)       与其他类型转换
作用 char* string CString 
转化为数字 atoi
atod
atof   Format 
转化为char*   c_str GetBuffer
GetBufferSetLength 


j)       格式化
作用 char* string CString 
格式化 sprintf   Format 


k)      得到长度
作用 char* string CString 
得到长度 strlen length GetLength 
得到大小   size GetAllocLength 


l)      判断为空
作用 char* string CString 
判断是否为空 判断是否==NULL或者第一个字符是否是’/0’ empty IsEmpty 


m)        重定义大小
作用 char* string CString 
重定义大小 realloc
new resize GetBufferSetLength 


n)        释放资源
作用 char* string CString 
释放 free
delete (delete[])   ReleaseBuffer
ReleaseBufferSetLength 


(五)  安全性
CString > string > char*
(六)  灵活性
CString > string >char*
(七)  可移植性
char* = string > CString
 总结
综上所述,在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的泛型算法,没必要再自己去造车轮。
比较两个字符串的方法(C++) std::string类还提供了一个compare函数,用于比较两个字符串。如果返回值小于0,则表示调用compare函数的字符串小于参数字符串;如果返回值大于0,则表示调用compare函数的字符串大于参数字符串。如果返回值小于0,则表示第一个字符串小于第二个字符串;如果返回值大于0,则表示第一个字符串大于第二个字符串。在C++中,std::string类提供了比较操作符来判断两个字符串是否相等或者大小关系。可以使用"==“运算符来判断两个字符串是否相等,使用”"运算符来比较大小。 阅读详情

相关推荐

流媒体协议-RTMP简介

与rtsp 不同,RTSP(Real-Time Streaming Protocol)是一个控制协议,负责控制媒体流的传输,但不传输媒体数据本身。RTSP 可以通过 TCP 或 UDP 传输 RTP 包来传输音视频数据。 RTMP(Real-Time Messaging Protocol)是一个综合性的协议,不仅可以传输音视频数据,还可以传输信令控制指令。RTMP 使用 TCP 作为传输协议,可以直接在 TCP 连接上传输音视频数据,也可以传输控制指令,实现了音视频流的实时传输和控制

xiaoshuaijinniu的博客 4550

C++ char * 和char[]的区别以及怎样与string类型进行转换

由于之前一直使用string类型来操作字符串,这几天突然看了几个程序,发现对char[]和char*类型不甚了解,然后从网上查看了几篇博客,在此进行以下总结。 博客如下:http://blog.youkuaiyun.com/liruxing1715/article/details/6715503 http://blog.youkuaiyun.com/yahohi/article/details/7427724 一、cha...

weixin_43892514的博客 2227

osgearth2.10 demo功能介绍

osgearth-2.10 demo: 说明: 1、运行环境win7 x64 旗舰版,CPU i5-6400 8核,8G内存; 2、括号内是对应demo的测试参数(.earth); 3、配置OSG_FILE_PATH; 4、参数命令行可以查看各个demo需要的输入参数; 5、前缀说明:gui界面程序、cmd控制台程序、non功能未知; 6、程序后括号里的non表示不需要通过命令行输入参数; 示例: 1、gui:osgearth_3pv(simple.earth):相机与地球的投影关系,Range表示相机

rach09的专栏 2421

CString/string/char *比较详解 (转)

CString/string/char *比较详解 (一)  概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于AN

龙的传人 955

Xiaojie雷达之路---毫米波雷达基础知识---角度估计

本篇文章主要介绍毫米波雷达的基础知识中的角度估计,对于本篇文章主要回答5个问题 1.在雷达的前方,如何估计前方一个物体的角度 2.角度测量的准确性 3.如何测量多个物体的角度 4.雷达可测的角度的视场最大值为多少 5.角度分辨率取决于什么因素 文章目录估计雷达前面一个物体的角度角度测量的准确性雷达的最大角视场测量雷达前方多个距离和速度相同的物体角度分辨率角度估计的流程 估计雷达前面一个物体的角度 估计一个物体的角度,最少需要两根接收天线 发射天线发送一个chirp,经过物体发射后信号,信号分别被第一根天

XiaoJie的博客 1万+

编译原理(东南大学)一:【编译原理期末冲刺救命笔记】速存!看完再上考场稳了!

本文详细介绍了编译原理的核心概念和流程,包括程序设计语言的分类、编译程序的各个阶段(如词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成)以及编译程序生成和构造的基础知识。文章还探讨了编译中的表格管理、出错处理和遍的概念,以及编译基础知识如高级语言、语法规则、字母表和符号串的运算。此外,文中还涉及文法与语言的关系,包括文法的概念、非终结符、终结符、产生式、推导和规约等。整体内容旨在为学习编译原理的学生提供全面的复习资料和考试准备指南。

一位搞嵌入式和前端的genius的博客 1027

C/C++ string和char的区别

/这两行语句等价 char greet [ 6 ] = {string s3;s3 = s1;//复制 s3 = s1 + s2;//连接两个字符串 int len = s3 . size();//获取字符串的长度。

aleequan的博客 5828

描边盛开火玫瑰

python描边盛开火玫瑰 代码如下 import turtle as t t.setup(800,800) t.hideturtle() t.speed(11) t.penup() t.goto(50,-450) t.pensize(5) t.pencolor("black") t.seth(140) t.pendown() t.speed(10) t.circle(-300,60) t.fd(100) #jiaodu80 #1ye t.seth(10) t.fd(50) t.fillcolor("gr

weixin_50973371的博客 2062

【C++】CString/string/char *比较详解

关键点:主要用于MFC的编写,而属于STL,两者都是符合标准C++的,但是在非windows平台或者说VC上还是用吧。另外还有一个这是传统C++才有的~(一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继

树人的专栏 1917

华为OD机试 C++【TLV解析】

这里的valueOffset指的是value在整串消息里的起始位置(从0开始数)。这表示tag是15(十六进制的0F),length是4,接着的8个字符是value的内容。你收到了一串由两端设备传递的TLV格式的消息,现在你需要根据这串消息生成一个对应的(tag, length, valueOffset)列表。tag是15,对应的数据长度为4,value从第3个字节开始,所以偏移量为2。第二行:一个数字n,表示我们给出的tag的数量(0 < n < 1000)。第一行:一串消息,长度不超过10000。

wtswts1232的博客 481

Android实战——白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。

小旭的专栏 5225

CString/string/char*比较详解

<br />  关键点:<CStirng>主要用于MFC的编写,而<string>属于STL,两者都是符合标准C++的,但是在非 windows平台或者说VC上还是用<string>吧。另外还有一个<string.h>这是传统C++才有的~ <br />   (一) 概述 <br />   string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中; <br />   CString(typedef CStringT> CString)为Visua

痞子龙3D编程 1696

第244篇 视觉SLAM后端之BA优化——Bundle Adjustment的原理

本文介绍了SLAM后端优化中的Bundle Adjustment(BA)技术。BA通过同时优化相机位姿和3D路标点位置,最小化重投影误差,解决前端估计的累积误差问题。文章详细讲解了BA的数学原理,包括目标函数构建、Gauss-Newton法和Levenberg-Marquardt法求解过程,以及利用稀疏性和Schur补加速计算的关键技术。对比了全量BA和增量BA的优缺点,并介绍了Ceres、g2o等工程实现工具。BA作为SLAM后端的核心算法,其理解深度直接影响系统性能优化能力。

郑伟强dev的专栏 344

MFC 问题集(8)CString/string/char *比较详解

(一) 概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI), wchar_t(unicode),...

weixin_30348519的博客 144

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【转】CString/string/char *比较详解

http://www.busfly.cn/csdn/post/cpp-CString-string-char.html关键点:<CStirng>主要用于MFC的编写,而<string>属于STL,两者都是符合标准C++的,但是在非 windows平台或者说VC上还是用<string>吧。另外还有一个<string.h>这是传统C++才有的~(一) 概...

weixin_30394633的博客 185

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2007-05-04 20:56CString/string/char *比较详解 [转]

(一)  概述string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR

(RING~~~)Arrgghh! For the last time, I'm a Developer, not a Detector! 625

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CString,string,char*之间的转换

这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。 以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。 1 strin...

编程知识分享 2万+
上一篇: 关于CString总结
下一篇: char*和CString转换
ShenRui
博客等级 码龄20年 63粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值