CString的API简介

CString操作大全指南 CString 对象的连接;格式化字符串(包括 int 型转化为 CString );CString 型转化成 int 型;CString 型和 char* 类型的相互转化;char* 转化成 CString;CString 转化成 char* 之一:使用LPCTSTR强制转化;CString 转化成 char* 之二:使用String对象的GetBuffer方法;CString 转化成 char*之三;和控件的接口;CString 型转化成 BSTR 型;BSTR 型转化成 CString 型;VARIANT 型转化成 CString 型;载入字符串表资源;CString 和临时对象;CString 的效率; 立即下载

引子

因为MFC很难用,所以它的CString也很难用。但是吐槽归吐槽,实际项目中还是避免不了MFC,也就不得不了解CString。下面对CString的比较常用的API做些整理,方便以后查阅。

注意,使用CString必须包含“afx.h”头文件,但是使用VS创建MFC工程,也会默认自带的,勿需费神。

CString 类对象的初始化

CString str;

CString str1(_T("abc"));

CString str2 = _T("defg");

 

TCHAR szBuf[] = _T("kkk");

CString str3(szBuf);

CString str4 = szBuf;

 

TCHAR *p = _T("1k2");

//TCHAR * 转换为 CString

CString str5(p);

CString str6 = p;

 

CString str7(str1);

CString str8 = str7;

字符串基本操作

● 长度:GetLength();

CString str(_T("abc"));

int len = str.GetLength(); //len == 3

 

● 是否为空,即不含字符:IsEmpty();

● 清空字符串:Empty();

CString str(_T("abc"));

BOOL mEmpty = str.IsEmpty(); //mEmpty == FALSE

str.Empty();

mEmpty = str.IsEmpty(); //mEmpty == TRUE

 

● 转换大小写:MakeUpper、MakeLower

● 转换顺序:MakeReverse

CString str(_T("Abc"));

str.MakeUpper(); //str == ABC

str.MakeLower(); //str == abc

str.MakeReverse(); //str == cba

 

● 字符串的连接:+、+=

CString str(_T("abc"));

str = _T("de") + str + _T("kp"); //str == deabckp

str += _T("123"); //str == deabckp123

TCHAR szBuf[] = _T("789");

str += szBuf; //str == deabckp123789

 

● 字符串的比较:==、!=、(<、>、<=、>= 不常用)、Compare(区分大小写)、CompareNoCase(不区分大小写)

CString str1(_T("abc"));

CString str2 = _T("aBc");

if (str1 == str2){

MessageBox(_T("str1 等于 str2"));

}else{

MessageBox(_T("str1 不等于 str2"));

}

字符串的查找

Find、ReverseFind、FindOneOf 三个函数可以实现字符串的查找操作

Find 从指定位置开始查找指定的字符或者字符串,返回其位置,找不到返回 -1;

举例:

CString str(_T("abcdefg"));

int idx = str.Find(_T("cde"), 0); //idx 的值为2;

 

ReverseFind 从字符串末尾开始查找指定的字符,返回其位置,找不到返回 -1,虽然是从后向前查找,但是位置为从开始算起;

CString str(_T("abcdefg"));

int idx = str.ReverseFind('e'); //idx 的值为4;

 

FindOneOf 查找参数中给定字符串中的任意字符,返回第一次出现的位置,找不到返回 -1;

CString str(_T("abcabcd"));

int idx = str.FindOneOf(_T("cbd")); //idx 的值为1;

字符串的替换与删除

Replace 替换 CString 对象中的指定的字符或者字符串,返回替换的个数,无匹配字符返回 0;

CString str(_T("abcdabc"));

int num = str.Replace('b', 'k'); //str == akcdakc, num == 2

 

CString str(_T("abcdabc"));

int num = str.Replace(_T("bc"), _T("kw")); //str == akwdakw, num == 2

 

Remove 删除 CString 对象中的指定字符,返回删除字符的个数,有多个时都会删除;

CString str(_T("abcdabcb"));

int num = str.Remove('b'); //str == acdac, num == 3

 

Delete 删除 CString 对象中的指定位置的字符,返回处理后的字符串长度;

CString str(_T("abcd"));

int num = str.Delete(1, 3); //str == a, num == 1

字符串的提取

● Left、Mid、Right 三个函数分别实现从 CString 对象的 左、中、右 进行字符串的提取操作;

CString str(_T("abcd"));

CString strResult = str.Left(2); //strResult == ab

strResult = str.Mid(1); //strResult == bcd

strResult = str.Mid(0, 2); //strResult == ab

strResult = str.Right(2); //strResult == cd

● Tokenize是分割字符串,例如:
CString strText="abc,def,ghi"; //需要分割的字符串
// 提取子字符串列表
vector<CString> subStrs;
int pos = 1; // 略过第一个?字符
CString strSub = strText.Tokenize(",", pos);
while (!strSub.IsEmpty())
{
	subStrs.push_back(strSub);
	strSub = strText.Tokenize(",", pos);
}

单个字符的修改

GetAt、SetAt 可以获取与修改 CString 对象中的单个 TCHAR 类型字符;

操作符也可以获取 CString 对象中的单个字符,但为只读的,不能进行修改;

CString str(_T("abcd"));

str.SetAt(0, 'k'); //str == kbck

TCHAR ch = str.GetAt(2); //ch == c

其他类型与 CString 对象类型的转换

● 格式化字符串:Format 方法,实现从 int、long 等数值类型、TCHAR、TCHAR * 等类型向 CString 类型的转换;

int num = 6;

CString str;

str.Format(_T("%d"), num);

 

● CString 类型向 int 等数值类型、TCHAR * 类型的转换:

TCHAR *pszBuf = str.GetBuffer();

str.ReleaseBuffer();

 

TCHAR *p = (LPTSTR)(LPCTSTR)str;

 

CString str1(_T("123"));

int num = _ttoi(str1);

CString 对象的 Ansi 与 Unicode 转换

大家可以直接使用上节课给大家讲解的方法,此外这里给大家介绍一种从 Ansi 转换到 Unicode 的隐含方法:

//当前工程环境为Unicode

CString str;

str = "abc";

char *p = "defg";

str = p;

CString 对象字符串所占用的字节数

CString str = _T("abc");

 错误的求法:sizeof(CString)、sizeof(str)

 正确的求法:str.GetLength()*sizeof(TCHAR)

当作为 TCHAR * 类型传参时

确保申请了足够用的空间,比如使用 GetModuleFileName 函数;

 

参考:https://www.cnblogs.com/MakeView660/p/6072591.html

40岁从智驾转具身智能之路 我的工作经历比较复杂,本科毕业后工作2年再次读研的,本科和硕士都是机械专业,硕士毕业后干了5年CAM和机器人再转入到自动驾驶行业。在自动驾驶干了8年,发现自动驾驶已经到了一个瓶颈,再次转行做具身智能。我就谈谈自己的最近这次转型之路。 阅读详情

相关推荐

基于IC动态加权的机器学习多因子选股策略:从模型融合到实战回测

在量化投资领域,多因子选股模型通过挖掘市场数据中的有效信号来预测股票收益。其核心原理在于利用统计学与机器学习算法,从海量因子中识别出与未来收益具有稳定相关性的特征。这一技术的核心价值在于将主观投资决策转化为系统化、可重复的客观过程,从而在控制风险的前提下追求超额收益。其典型应用场景包括股票阿尔法策略构建、Smart Beta产品设计以及资产配置中的股票筛选环节。本文聚焦于如何通过信息系数(IC)这一关键指标,动态融合Ridge回归、MLP神经网络和随机森林等多个预测模型,构建一个能够自适应市场风格轮动的选股

weixin_34216614的博客 451

WinAPI程序如何使用CString

CString 是一个很强大的类,功能强大,可以节省很多代码。可是CString好像在MFC或ATL中才可以使用,WinAPI程序可以使用这个类吗?其实也是可以的。 只需要引入 AFX.H 头文件即可。 注意:必须将AFX.H放在Windows.h前面,否则afx.h会检测到Windows.h,从而导致编译错误(AFX.H里有一条#error语句)。 #include <afx.h&...

szx0427的博客 485

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4143

关于CString总结

 关于CString总结 作者:wangshengxiang 前言:串操作是编程中最常用也最基本的操作之一。 做为VC程序员,无论是菜鸟或高手都曾用过Cstring。而且好像实际编程中很难离得开它(虽然它不是标准C++中的库)。因为MFC中提供的这个类对我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而

freelybird的专栏 1171

【C++】C++异常语法、使用、规范、异常安全及异常的优缺点

实际中我们可以可以去继承exception类实现自己的异常类。但是实际中很多公司像上面一样自己定义一套异常继承体系。因为C++标准库设计的不够好用。如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。C++ 提供了一系列标准的异常,定义在 中,我们可以在程序中使用这些标准的异常。异常是一种处理错误的方式,

weixin_51692487的博客 1524

CString详解

CString是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册,但囊括了大部分常见基本问题。这篇文章包括以下内容:CString对象的连接格式化字符串(包括 int 型转化为CString)CString型转化成 i...

Protinx的博客 7660

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1059

[C++ API总结]String

[C++ API总结]String

仰望星空 1319

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

Linux V3H 平台开发系列讲解(摄像头)2.3.1 MAX96912 MAX96717 GMSL1 CSI 2lane配置

​ 单路摄像头,数据流类型YUV422, mipi接口,经过MAX96717 串行器,gmsl1链路 到解串器MAX96712,最后mipi csi 2lane(lane0 lane1)输出到 renesa v3h soc开发板; ​

xian18809311584的博客 580

CString 的成员函数详解

CString 的成员函数详解 CSTRING的成员函数详解 typedef ATL::CStringT< TCHAR, StrTraitMFC_DLL< TCHAR > > CString; CString的构造函数: 1 CString( ); 2 CString( const CString& stringSrc ); 3 CString( TCHAR ch, int nRepeat = 1 ); 4 CString( LPCTSTR lpch, int nLength

abc 4038

ICC2:使用analyze_lib_cell_placement检查lib cell的pass rate

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?在place之前需要使analyze_lib_cell_placement命令去检查lib cell在当前的site row/power plan/legalize设置的环境下能够正常place和legalize。下面分享一个脚本去报告pass rate低于2%的lib cell。

m0_61544122的博客 674

CString编码问题

在使用多字节字符集(MBCS)时,CString中的每个字符并不总是只占1个字节。实际上,字符所占的字节数取决于字符的编码和所使用的具体多字节字符集。CStringCStringCStringCStringCStringCStringCStringCStringCString综上所述,在使用多字节字符集时,CString中的每个字符所占的字节数并不固定,而是取决于字符的编码和所使用的具体多字节字符集。因此,在处理CString时,应始终注意其编码方式,并确保在字符串转换和操作时正确处理了字符的编码。

Allen Roson 1149

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

CString,string,char*之间的转换

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

编程知识分享 2万+

老版QQ原生表情gif动态

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

string与cstring区别

1.string与cstring有什么区别 是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_string的typedef),用于字符串操作。 是C标准库头文件<string.h>的C++标准库版本,包含了C风格字符串(NUL即’\0’结尾字符串)相关的一些类型和函数的声明,例如strcmp、strchr、strstr等。和<string.h>的最大区别在于,其中声明的名称都是位于std命名空间中的,而不是后

qq_656236576的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

关于CString

通过阅读本文你可以学习如何有效地使用 CString。  CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。  使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CString的完全手册,

VC++/MFC的专栏 1791

CString 操作指南

CString 操作指南原著:Joseph M. Newcomer翻译:littleloach原文出处:codeproject:CString Management通过阅读本文你可以学习如何有效地使用 CString。  CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于

1万+

Win32 API 程序一样可以使用 CString

Win32 API 程序一样可以使用 CString 非 MFC 应用程序包含 "atlstr.h" 就可以使用 CString 类

飞翔王子 438

MFC中CString转为char*;char*转为CString

MFC中CString转为char*;char*转为CString

gujvihhui的博客 3927

CString中的GetBuffer()和GetString()的对比

CString::GetString() GetString() 使用時機是當我們需要知道其(char )指针以取得其字元內容 比方說 某個window API需要(char)指针做為輸入時 我們就可以使用GetString() 不過要注意的是 GetString() 所傳出來的指针是不能被修改的 他只能用來讓我們知道裡面的字元 而不能讓我們對裡面做修改 CString::GetBuffer() ...

yangsen001122的博客 5136

Unicode项目中CString转const char*,string 转CString

前言 做MFC开发,Unicode的项目。用到的字符串都是CString的。 但是,好些API需要的是string 或 char* 就需要转换。 所以,就需要深入了解CString的格式,string的格式,char*的格式,才好下手。 下面详细介绍了如何将CString 转换为 const char*, 也等价于将CString 转换为 std::string, 或cv::String 。 cv::String是OpenCV里面的。这个问题,是在调用 cv::imwrite();函数中遇到的..

优快云的博客 1554

CString,string,char*之间的转换 及 CString&CStringA&CStringW之间的相互转换

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

gdamichael的博客 2893

WTL中CString的使用问题

如果你按照说明定义_WTL_USE_CSTRING,然后包含atlmsic.h,就会出现CString定义不明的编译错误,其实就是编译器分不清你是用WTL::CString,还是ATL::CString。其实你跟本用不着用WTL::CString,它们根本上就是一样的。避免这类错误的方法就是在atlapp.h前面包含atlstr.h,这个文件里面定义的__ATLSTR_H__和_WTL_USE

4058

CString类详细介绍

CString类背景介绍 这是本人第一次写csdn博客,如果有写得不好的地方请各位大佬帮忙指出不足之处,本人定会谦虚请教。众所周知,MFC(微软基础类库)是基于Windows界面开发的,它封装了大部分的Windows API(应用程序接口)函数,由C格式的函数升级为类库。而CString字符串类是MFC中比较常用的一个类,CString类里封装了很多对字符串操作的成员函数。接下来讲解该类的成员函数...

kevin685264的博客 9094

CString

大]  CString位于头文件afx.h中。   CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。这篇文章就来讨论这些技巧。   使用CString可以让你对字符串的操作更加直截了当。这篇文章不是CStr

1144
上一篇: C++【运算符重载】
下一篇: MySQL删除表:Cannot delete or update a parent row: a foreign key constraint fails。
pstrunner
博客等级 码龄19年 50粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值