MFC常用类CString
mfc cstring replace用法
mfc cstring replace用法MFC CString Replace函数用法-一步一步回答第一步:介绍MFC CString类MFC(Microsoft Foundation Classes)是微软推出的一套用于快速开发Windows应用程序的类库。
其中包括了CString类,它是MFC中的字符串处理类之一。
CString类提供了一种方便的方式来处理和操作字符串,包括查找、替换、分割等功能。
在本篇文章中,我们将专注于CString类的Replace函数的用法。
第二步:解释Replace函数的功能和参数Replace函数是CString类的一个成员函数,用于在一个字符串中替换指定的字符或字符串。
其函数原型如下:int Replace(LPCTSTR lpszOld, LPCTSTR lpszNew);Replace函数接受两个参数,分别是被替换的旧字符串(lpszOld)和替换后的新字符串(lpszNew)。
函数将会找到并替换原字符串中所有匹配的旧字符串。
第三步:演示Replace函数的基本用法让我们以一个简单的例子来演示Replace函数的基本用法。
假设有如下的字符串:CString str = "Hello World!";我们希望将其中的"World"替换为"Universe"。
代码如下:CString str = "Hello World!";CString oldStr = "World";CString newStr = "Universe";str.Replace(oldStr, newStr);执行上述代码后,str的值将被修改为"Hello Universe!"。
可以看到,Replace函数返回的是替换后新字符串中发生改变的字符个数。
mfc编程cstringlist实例
mfc编程cstringlist实例MFC编程中的CStringList实例在MFC(Microsoft Foundation Classes)编程中,CStringList是一个非常有用的类,用于管理字符串的链表。
它提供了许多方便的功能,使得操作字符串链表变得更加简单和高效。
在本文中,我们将逐步回答关于CStringList的问题,并给出一些实例代码来帮助读者更好地理解和使用这个类。
问题1:什么是CStringList?CStringList是MFC框架中的一个类,它是一个模板类,用于处理字符串的链表。
它使用的是C++的模板机制,可以在链表中存储任意类型的数据。
但在这里,我们主要关注它在处理字符串方面的应用。
问题2:如何创建一个CStringList对象?要创建一个CStringList对象,只需简单地声明一个新的实例即可:CStringList strList;这将创建一个名为strList的CStringList对象。
您可以根据需要创建多个实例,并在程序的任何地方使用它们。
问题3:如何向CStringList中添加字符串?要向CStringList中添加字符串,可以使用AddHead()或AddTail()成员函数。
AddHead()函数将字符串添加到链表的头部,而AddTail()函数则将字符串添加到链表的尾部。
下面是一些示例代码:CStringList strList;strList.AddHead("Hello");strList.AddTail("World");这将创建一个名为strList的CStringList对象,并向其头部添加字符串"Hello",在其尾部添加字符串"World"。
问题4:如何遍历并访问CStringList中的字符串?要遍历并访问CStringList中的字符串,可以使用CstringList的一个迭代器。
2019年MFC中CString类的用法
CString 是一种很有用的数据类型。
它们很大程度上简化了MFC中的许多操作,使得M FC在做字符串操作的时候方便了很多。
不管怎样,使用CString有很多特殊的技巧,特别是对于纯C背景下走出来的程序员来说有点难以学习。
这篇文章就来讨论这些技巧。
使用CString可以让你对字符串的操作更加直截了当。
这篇文章不是CString的完全手册,但囊括了大部分常见基本问题。
这篇文章包括以下内容:CString 对象的连接格式化字符串(包括int 型转化为CString )CString 型转化成int 型CString 型和char* 类型的相互转化char* 转化成CStringCString 转化成char* 之一:使用LPCTSTR强制转化CString 转化成char* 之二:使用CString对象的GetBuffer方法CString 转化成char* 之三: 和控件的接口CString 型转化成BSTR 型;BSTR 型转化成CString 型;V ARIANT 型转化成CString 型;载入字符串表资源;CString 和临时对象;CString 的效率;总结下面我分别讨论。
1、CString 对象的连接能体现出CString 类型方便性特点的一个方面就字符串的连接,使用CString 类型,你能很方便地连接两个字符串,正如下面的例子:CString gray("Gray");CString cat("Cat");CString graycat = gray + cat;要比用下面的方法好得多:char gray[] = "Gray";char cat[] = "Cat";char * graycat = malloc(strlen(gray) + strlen(cat) + 1);strcpy(graycat, gray);strcat(graycat, cat);2、格式化字符串与其用sprintf() 函数或wsprintf() 函数来格式化一个字符串,还不如用CString 对象的Format()方法:CString s;(_T("The total is %d"), total);用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。
VS2010和MFC编程入门之42(MFC常用类:CString类)
VS2010MFC编程入门之四十二(MFC常用类:CString类)理解了分割窗口的有关知识,这里开始讲解MFC的一些常用类,先来说说CString类。
CString类简介CString类作为MFC的常用类,当之无愧。
可以这样说,只要是从事MFC开发,基本都会遇到使用CString类的场合。
因为字符串的使用比较普遍,而CString类又提供了对字符串的便捷操作,所以它给MFC开发人员带来了高的开发效率,受到了开发者的欢迎。
大家使用VS2010的话,可能会见到CStringT,实际上它是一个操作可变长度字符串的模板类。
CStringT模板类有三个实例:CString、CStringA和CStringW,它们分别提供对TCHAR、char和wchar_t字符类型的字符串的操作。
char类型定义的是Ansi字符,wchar_t类型定义的是Unicode字符,而TCHAR取决于MFC工程的属性对话框中的Configuration Properties->General->Character Set属性,如果此属性为Use Multi-Byte Character Set,则TCHAR类型定义的是Ansi字符,而如果为Use Unicode Character Set,则TCHAR类型定义的是Unicode字符。
三个字符串类的操作是一样的,只是处理的字符类型不同。
鸡啄米以CString类为讲解对象。
CString类的字符串操作1. CString类的构造函数CString类有很多构造函数,这里只介绍几个比较常用的:CString(constCString&stringSrc);将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。
例如:C++代码CString str1(_T("")); // 将常量字符串拷贝到str1 CString str2(str1); // 将str1的内容拷贝到str2CString(LPCTSTR lpch, intnLength);将字符串lpch中的前nLength个字符拷贝到该CString对象。
MFC常见数据类型转换
1.CTime--〉CStringCTime t;t=CTime::GetCurrentTime();CString sur;sur.Format("%s",t.Format("%Y-%m-%d")); MessageBox(sur);2.long --> CStringlong a ;CString b;b.format("%ld",a);3.double --->CStringdouble a;CString b;b.format("%f",a);4.CString--〉CTimeCString sur;sur="2006-08-09";COleDateTime time1;time1.ParseDateTime(sur);SYSTEMTIME systime; VariantTimeToSystemTime(time1, &systime); CTime tm(systime);m_time=tm;UpdateData(false);5.CString和int,float之间的转换。
5.1 int <->CString1) int ->CStringint n = 1;str.Format("%d",n);2) CString->intCString str = "1";int n = _ttoi(str);5.2 char* 与CString1)char*->CStringchar sz[128];CString str;str.Format("%s",sz);2) CString-> char*CString str;int nLength = str.GetLength();char* sz = new char[nLength];sz = str.GetBuffer(0);5.3 float<->CString1)float/double->CStringfloat f = 0.0;CString str;str.Format("%f",f);2) CString->float/doubleCString str = "0.0";float f = _tto(str);Format函数第一个参数是要转的那个数的类型我现在的程序是int a = 21;double b = 3.45;str.Format("%03d%02.4f" , a , b);现在得到的结果是"0213.4500"%02.4f对b的整数部分不起作用我想要得到一个形如aaabb.bbbb的字符串("02103.4500"),如果a不足3位,用0补齐,如果b的整数和小数不足2位和4位也要用0补齐CString::Format("%d",xx);其中xx不能为双精度,不然会转化错误,应该使用CString::Format("%d",(LONG)xx);例:DOUBLE d = 22.443;CString str;str.Format("%d", d);转化后的str = "1924145349",这是错误的!1、CString to char*经过类型强制转换,可以将CString类型转换成char*,例如: CString cStr = "Hello,world!"; char* zStr = (char*)(LPCTSTR)cStr;2、char* to CStringchar*类型可以直接给CString,完成自动转换,例如: char* zStr = "Hello,world!"; CString cStr = zStr;3、CString to LPCSTR将CString转换成LPCSTR,需要获得CString的长度,例如: CString cStr = _T("Hello,world!"); int nLen = cStr.GetLength();LPCSTR lpszBuf = cStr.GetBuffer(nLen);4、CString to LPSTR这个和第3个技巧是一样的,例如: CString cStr = _T("Hello,world!"); int nLen = str.GetLength();LPSTR lpszBuf = str.GetBuffer(nLen);5、Char[] to int将字符串类型转换成整数型,可以使用atoi函数,例如:char c[10];int n; n = atoi(c)6、Char[] to float和第5个技巧一样,使用atof()函数可以转换成float型,例如: char c[10]; float f; f = atof(c);7、Char* to int和第5个技巧完全一样,例如: char *str = "100"; int i;i = atoi(str);一、其它数据类型转换为字符串短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换长整型(long) ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量str = "2008北京奥运";buf = (LPSTR)(LPCTSTR)str; BSTR类型的_variant_t变量 v1 = (_bstr_t)"程序员";buf = _com_util::ConvertBSTRToString((_bstr_t)v1);三、字符串转换为其它数据类型 strcpy(temp,"123");短整型(int)i = atoi(temp); 长整型(long) l = atol(temp); 浮点(double) d = atof(temp);四、其它数据类型转换到CString使用CString的成员函数Format来转换,例如:整数(int)str.Format("%d",i); 浮点数(float)str.Format("%f",i);字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值 str = username;CString转字符数组:int a;char ch[20];CString str;strcpy(ch,CW2A(str));Int转char[]字符数组Int m_insA_Vchar insA_V[10] = {0};itoa(m_insA_V,insA_V,10);Float转char[]字符数组函数名: gcvt把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数用法: char *gcvt(double value, int ndigit, char *buf);参数value——被转换的值。
cstringlist用法
CStringList是MFC编程中的一种数据结构,相当于C++的STL中的链表。
它是一个CString的链表,其用法非常简洁。
以下是一些常用的CStringList方法:
1. 插入数据:可以使用`AddTail()`或`AddHead()`在列表的尾部或头部插入元素。
2. 删除数据:可以使用`RemoveAll()`删除所有元素,使用`RemoveAt()`删除指定位置的元素,使用`RemoveHead()`删除头部元素,使用`RemoveTail()`删除尾部元素。
3. 获取元素个数:可以使用`GetCount()`返回列表中的元素数目。
4. 获取元素值:可以使用`GetAt()`和`FindIndex()`获取位于给定位置的元素。
例如,`cstringList.FindIndex(index)`将返回索引指定的元素的位置。
5. 获取头尾元素:可以使用`GetHead()`获取列表的头部元素,使用`GetTail()`获取尾部元素。
6. 遍历列表:推荐使用上述的方法进行遍历,而不是使用POSITION变量。
CString的常用方法
CString是MFC对字符串的封装, 它包含一个可变长的字符序列, 提供了很多串操作, 使用它比使用其他的字符串类型更加方便. CString没有继承任何类.CString中的各个字符都是TCHAR类型的, 它在UNICODE中是16位, 在普通字符集中是8位.CString对象可以随着串合并操作而动态增长其长度,而无须用户来对其长度进行专门设置. 你最好把CString看作一个串类型,而不是一个指向字符串的指针; 但CString可以转换为const char*和LPCTSTR类型, 也就是说, 以const char*和LPCTSTR为参数,也可以以CString 作为参数进行调用.一、CString的构造函数CString类拥有众多的构造函数, 用于以不同的数据类型和不同的方式构造一个字符串对象:CString(); //无参数的构造函数,产生一个空的CString对象CString(const CString& stringSrc); //用另一个CString对象的值初始化对象CString(TCHAR ch, int nRepeat=1);//用一个字符重复若干次来初始化对象CString(LPCTSTR lpch, int nLength);//用一个字符数组和一定长度来初始化对象CString(const unsigned char* psz);//从一个无符号字符指针构造对象CString(LPCWSTR lpsz);//从一个Unicode字符串来构造对象CString(LPCSTR lpsz);//从一个ANSI字符串构造对象可以把某些构造函数看作于类型转化。
下面是一些例子:CString s1;CString s2("big");CString s3 = s2;CString s4(S2 + " " + s3);CString s5(" x"); //s5=" x";CString s6(" x",7); //s6=" xxxxxxx";CString s7((LPCSTR)ID_FILE_NEW); //ID_FILE_NEW是一个资源IDCString city="Beijing";//注意不是同值运算符二、CString的基本操作得到字符串长度:即字符串包含的字符数,用函数GetLength,它返回一个int类型的数。
深入解析MFC -- CString的内存结构
深入解析MFC -- CString的内存结构分类:C++ 2009-06-30 19:40 2173人阅读评论(0) 收藏举报mfcnullclassstringcharacterreferenceVC6的时候记得看过CString的源代码,并不复杂,应该是从VC7开始,MFC和ATL共用一个CString 了,新的CString使用了模板技术和其它技术,值得一提。
先看CString的定义:typedef CAtlString CString;如果想明确使用ANSI和UNICODE版本,可以使用CStringA和CStringW,看它们的定义:typedef CAtlStringW CStringW;typedef CAtlStringA CStringA;以上三个Atl版本的String,其定义为:typedef CStringT< wchar_t, StrTraitATL< wchar_t > > CAtlStringW;typedef CStringT< char, StrTraitATL< char > > CAtlStringA;typedef CStringT< TCHAR, StrTraitATL< TCHAR > > CAtlString;因此,CStringT才是真实的CString类。
template< typename BaseType, class StringTraits >class CStringT :public CSimpleStringT< BaseType, _CSTRING_IMPL_::_MFCDLLTraitsCheck<BaseType, StringTraits>::c_bIsMFCDLLTraits >{};CStringT有两个模板参数,第一个表明字符类型,第二个参数从源代码中知道是StrTraitATL:template< typename _BaseType = char, class StringIterator = ChTraitsOS< _BaseType > >class StrTraitATL : public StringIterator{public:static HINSTANCE FindStringResourceInstance(__in UINT nID) throw(){return( AtlFindStringResourceInstance( nID ) );}static IAtlStringMgr* GetDefaultManager() throw(){return( &g_strmgr );}};从类声明看到他提供了一个字符串管理器,字符迭代器和从资源中获得字符串的功能。
MFC常用的类及其成员函数简介
MFC常用类及其成员函数CRuntimeClass结构在CRuntimeClass结构中定义了类名、对象所占存储空间的大小、类的版本号等成员变量及动态创建对象、派生关系判断等成员函数。
每一个从CObject 类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基类的信息。
要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时类型识别的MFC宏。
CCmdTarget类(1)消息发送MFC应用程序为每个CCmdTarget派生类创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。
(2)设置光标BeginWaitCursor() 将光标改为沙漏形状;EndWaitCursor() 将光标改回到之前的形状;RestoreWaitCursor()用于将光标还原为等待状态。
(3)支持自动化CCmdTarget类支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。
CWinThread类由CCmdTarget派生,主要工作是创建和处理消息循环。
CWinApp类从CWinThread类派生,成员函数InitApplication()、InitInstance()、Run()。
在InitInstance()函数中,创建了一个单文档模板类或多文档模板类(CDocTemplate)的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档类对象,框架窗口类对象和视图类对象.在MFC应用程序中有且仅有一个CWinApp派生类的对象,代表程序运行的主线程,代表应用程序本身。
CWnd类由CCmdTarget类直接派生,是MFC中最基本的GUI对象。
公共变量m_hWnd 用于存放供API函数调用的窗口句柄。
CframeWnd类从CWnd类派生而来,主要用来掌管一个窗口。
其对象是一个框架窗口,包括边界、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。
MFC、C++、C中字符类型CString int string char知识
MFC/C++/C中字符类型CString, int, string, char*转换(转)参考网址:/s/blog_50a0aa5e0100dntj.html1 CString,int,string,char*之间的转换string 转CString例子:CString.format("%s", string.c_str());char 转CString例子:CString.format("%s", char*);char 转string例子:string s(char *);string 转char *例子:char *p = string.c_str();// CString转std::stringCString str = dlg.GetPathName();setlocale(LC_ALL, "chs");char *p = new char[256];wcstombs ( p, str, 256 );m_fileName = p;1,string -> CStringCString.format("%s", string.c_str());用c_str()确实比data()要好.2,char -> stringstring s(char *);你的只能初始化,在不是初始化的地方最好还是用assign().3,CString -> stringstring s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string1.data(),返回没有”\0“的字符串数组2,c_str(),返回有”\0“的字符串数组3,copy()CString互转int 将字符转换为整数,可以使用atoi、_atoi64或atol。
MFC中常用数据类型
typedef unsigned short WORD; windef.h
typedef unsigned short wchar_t
typedef short SHORT; winnt.h
//整型typedef int
下面将介绍一些常用数据类型的使用:
我们先定义一些常见类型变量借以说明
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.1பைடு நூலகம்9;
char username[]="女侠程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
LPCRECT:32-bit指针,指向一个不变的RECT结构
L表示long指针, 这是为了兼容Windows 3.1等16位操作系统遗留下来的, 在win32中以及其他的32为操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
P表示这是一个指针
C表示是一个常量
同样, LPCSTR就只能是一个ANSI字符串, 在程序中我们大部分时间要使用带T的类型定义。
LPCTSTR == const TCHAR *
MFC/windows基本数据类型详细介绍
#define FALSE 0 afx.h
#define TRUE 1 afx.h
VS2010和MFC编程入门之43(MFC常用类:CTime类和CTimeSpan类)
VS2010MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)理解了MFC常用类CString类的用法,这里继续讲另外两个MFC常用类-日期和时间类CTime类和CTimeSpan类。
日期和时间类简介CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。
CTimeSpan类的对象表示的是时间间隔。
CTime类和CTimeSpan类一般不会被继承使用。
两者对象的大小都是8个字节。
CTime表示的日期上限是3000年12月31日,下限是1970年1月1日 12:00:00 AM GMT。
CTime类的主要成员函数下面列出CTime类的主要成员函数,并加以讲解。
CTime();构造一个未经初始化的CTime对象。
此构造函数使我们可以定义一个CTime对象的数组,在使用数组前需要以有效的时间值为其初始化。
CTime(__time64_t time);以一个__time64_t(注意:最前面的下划线有两条)类型的数据来构造一个CTime对象。
参数time是一个__time64_t类型的值,表示自GMT时间1970年1月1日零点以来的秒数,这里要注意的是,参数time代表的时间会转换为本地时间保存到构造的CTime对象中。
例如,我们传递参数0构造一个CTime对象,然后调用CTime对象的GetHour成员函数将返回8,因为参数0代表的GMT时间转换为北京时间后为1970年1月1日 8:00:00。
CTime(intnYear,intnMonth,intnDay,intnHour,intnMin,intnSec,intnDST = -1);以本地时间的年、月、日、小时、分钟、秒等几个时间分量构造CTime对象。
参数nYear、nMonth、nDay、nHour、nMin、nSec分别表示年、月、日、小时、分钟、秒,取值范围如下:时间分量取值范围nYear1970-3000nMonth 1-12nDay 1-31nHour 0-23nMin 0-59nSec 0-59参数nDST指定是否实行夏令时,为0时表示实行标准时间,为正数时表示实行夏令时,为负数时由系统自动计算实行的是标准时间还是夏令时。
mfc 控件变量
mfc 控件变量MFC 控件变量,是指在界面中通过控件ID或者控件名称定义的变量,方便程序员通过代码来操作相关控件,从而实现程序功能。
下面是对 MFC 控件变量的详细解释和使用方法:1.定义控件变量定义控件变量有两种方法:(1)响应菜单项或按钮事件,使用类向导生成的消息映射函数,在函数内部使用对话框类中的控件变量进行操作。
(2)在对话框类的头文件中添加控件变量的定义,即将控件变量声明为一个类的成员变量。
2.控件变量的数据类型MFC 支持的控件变量数据类型可以分为四类:(1)BOOL 类型,通常用于 Check Box/ Radio Button 类型的控件。
当控件被选中时,BOOL 类型的控件变量值为 true;当为未选中时,BOOL 类型的控件变量值为 false。
(2)CString 类型,通常用于 edit 控件和 static 控件。
CString 是在 MFC 库中预定义的字符串类,其操作方式类似 C++ 中的 string 类。
(3)int 类型,通常用于 edit 控件和 combo box 控件。
对于edit 控件,int 类型的控件变量可以用于获取和设置控件中的整数值。
对于 combo box 控件,则可以用于获取和设置控件列表中选定项的索引。
(4)CWnd *类型,通常用于 List Box/ Combo Box/ Edit 等控件。
CWnd 是 MFC 中的基类,设计用于操作窗口对象。
CWnd *类型的控件变量可以用于获取指向控件窗口对象的指针,以便对其执行更多操作。
3.使用控件变量在对话框类中定义控件变量后,我们可以在类成员函数内使用该变量,对控件进行各种操作。
例如:(1)获取控件文本我们可以使用 CString 类型的控件变量和控件对象的 GetWindowText 函数来获取 edit控件中的文本值:CString str;GetDlgItemText(IDC_EDIT1, str);m_strEdit1 = str;(2)设置控件文本我们可以直接使用 CString 类型的控件变量设置 edit 盒 static 控件中的文本值:SetDlgItemText(IDC_STATIC1, m_strStatic1);(3)获取 Check Box/ Radio Button 的状态我们可以使用 BOOL 类型的控件变量获取 Check Box/ Radio Button的状态:BOOL bCheck = GetDlgItemInt(IDC_CHECK1);if (bCheck) {// Check Box 被选中}(4)设置 Combo Box 选中项我们可以使用 int 类型的控件变量来设置 combo box 的选中项:m_ComboBox.SetCurSel(m_nComboBoxIndex);4.总结MFC 控件变量是在对话框类中定义的,用于操作对话框的控件。
mfc cstring 构造
MFC CString 构造介绍MFC(Microsoft Foundation Classes)是微软公司为开发Windows应用程序提供的一套C++类库。
其中,CString是MFC中常用的字符串类之一。
在本文中,我们将探讨MFC CString的构造方法。
CString提供了多种构造函数,用于创建不同种类的字符串对象。
我们将深入了解这些构造函数的详细用法和应用场景。
构造函数的基本用法CString的构造函数用于创建一个CString对象,并将字符串赋给它。
其基本语法如下:CString();CString(LPCTSTR lpsz);•CString():默认构造函数,创建一个空的CString对象。
•CString(LPCTSTR lpsz):带参数的构造函数,创建一个CString对象并将lpsz指向的字符串赋给它。
构造函数示例示例1:使用默认构造函数创建空字符串CString str; // 创建一个空的CString对象通过默认构造函数创建的CString对象是一个空字符串对象,它不包含任何字符。
示例2:使用带参数的构造函数创建非空字符串CString str("Hello, world!"); // 创建一个CString对象,并将字符串赋给它通过带参数的构造函数创建的CString对象会根据传入的字符串来初始化自己,上述示例中的str对象将包含字符串”Hello, world!“。
示例3:使用带参数的构造函数创建CString对象并赋初值CString str = "Hello, world!"; // 创建一个CString对象,并将字符串赋给它上述代码与示例2的效果相同,都是创建一个CString对象,并将字符串赋给它。
提供其他CString类的构造函数除了前面提到的基本构造函数外,CString还提供了其他构造函数,用于更灵活地创建和初始化CString对象。
CString类
MFC--CString类CString类一、常用成员函数1.int GetLength()const;说明:获取CString类对象包含字符串的长度(字符数)。
2.BOOL IsEmpty()const;说明:测试CString类对象包含的字符串是否为空。
3.void Empty();说明:使CString类对象包含的字符串为空字符串。
4.TCHAR GetAt(int nIndex)const;说明:获得字符串指定位置处的字符。
5.TCHAR operator [](int nIndex)const;说明:获得字符串指定位置处的字符,作用和GetAt()一样。
6.void SetAt(int nIndex, TCHAR ch);说明:设定字符串指定位置处的字符。
7.operator LPCTSTR()const;说明:返回指向储存在CString类对象内的字符串指针。
8.MidMid函数有两个重载函数:CString Mid(int nFirst)const; throw(CMemoryException);获取从nFirst位置开始的子串。
CString Mid(int nFirst, int nCount)const; throw(CMemoryException);获取从nFirst位置开始包含nCount个字符的子串。
9.CString Left(int nCount)const;throw(CMemoryException);说明:获取字符串左边nCount长度的字符串。
10.CString Right(int nCount)const; throw(CMemoryException);说明:获取字符串右边nCount长度的字符串。
11.CString SpanIncluding(LPCTSTR lpszCharSet)const;throw (CMemoryException);说明:从字符串中提取包含在指定字符集lpszCharSet中的字符的子串。
【干货】MFC中CString使用之float与判断是否为数字(含小数)的方法
【干货】MFC中CString使用之float与判断是否为数字(含小数)的
方法
在学习MFC编程时遇到CString使用问题,主要是
1 将编辑框控件中获取的CString变量转化为浮点float
2 判断读取的CString是否是数据,包括小数
网上有很多热心好友,但给出的答案或者是自己编写逐个比对的函数,或者方法用不了。
本人经过学习,终于找到了方法。
第一个问题较为简单
double data1;
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
data1 = _attf(str); 此处不是_attl()
第二个问题较为麻烦一点,不过MFC的CString已经帮我们解决了
double data1;
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
if (str.SpanIncluding(_T("0123456789")) != str)
{
//不是整数,返回;
//当str表示小数时,如str=”123.56”,判别失效
return;
}
若str = “123.56”,使用如下判别
if (str.SpanIncluding(_T(".0123456789")) != str)
{
//不是整数,返回;
return;
}。
mfc cstring拆分函数
mfc cstring拆分函数CString是MFC中的一个字符串类,提供了一系列的成员函数用于字符串的操作。
其中也包含了拆分字符串的函数。
本文将介绍CString 中的拆分函数,包括Split、Tokenize以及自定义的拆分函数。
一、Split函数Split函数是CString中最常用的拆分字符串的函数之一。
它的原型如下:int Split(CStringArray& sa, LPCTSTR lpszStr, LPCTSTR lpszDelimiters);参数说明:sa:用于存储拆分结果的CStringArray对象。
lpszStr:需要拆分的字符串。
lpszDelimiters:用于拆分字符串的分隔符字符串。
Split函数会按照分隔符字符串将源字符串拆分成若干个子字符串,并将结果存储在CStringArray对象中。
下面是一个使用示例:CString str = "Hello,World";CStringArray strArray;str.Split(strArray, ",");Split函数将以逗号为分隔符,将字符串str拆分成两个子字符串"Hello"和"World",并将结果存储在strArray中。
二、Tokenize函数Tokenize函数是CString中另一个拆分字符串的函数。
它的原型如下:int Tokenize(CString& strToken, int& iStart, LPCTSTR lpszSeparators);参数说明:strToken:用于存储拆分结果的CString对象。
iStart:指示拆分起始位置的索引,拆分完成后会自动更新为下一次拆分的起始位置。
lpszSeparators:用于拆分字符串的分隔符字符串。
Tokenize函数会按照分隔符字符串将源字符串从起始位置开始拆分成两个子字符串,并将结果存储在strToken中。
CString类的原理与使用
CString类的原理与使用先定义几个以后会用到的变量:CString str1, str2, str3;概括说明:MFC对CString类的封装可能的确不如std::string完善,但是也的确不错,功能也足够强大,使用上还很体贴。
其基本特征为:CString类没有基类。
CString类和LPCTSTR的关系:MSDN上说“CString objects follow "value semantics." Think of a CString object as an actual string, not as a pointer to a string.”也就是说用的时候除了考虑使用它的成员函数的方式,就把它当作普通的c-style字符串来使用就行了。
你可以在构造函数中使用LPCTSTR:CString str("Hello World!");可以:str1 = str2; 或者 str1 = “Hello”;也可以:str3 = str1 + str2; 或者 str3 = str1 + “Hello”;当然也可以:str1 += str2; 或者 str1 += “Hello”;实际上下列的这些操作符都可以用在CString对象之间或者CString和LPCTSTR对象之间:==、!=、<、>、<=、>=自然,将CString对象强制转换到LPCTSTR类型也就应该在情理之中:LPCTSTR string = (LPCTSTR) str1;CString支持UNICODE和多字节字符集(MBCS)。
因为其本身是基于TCHAR的——当然你不要忘了定义编码方式,如:#define _UNICODE。
CString支持引用计数。
可以通过其成员函数LockBuffe/和UnLockBuffer来禁用/启用引用计数。
对于CString类的成员函数的定义、说明、返回值等形式在此并不赘述,如有此疑问请参阅:中的相关链接。
cstringlist用法 -回复
cstringlist用法-回复CStringList是MFC(Microsoft Foundation Class)中的一个类,主要用于管理一组C-style字符串的链表。
本篇文章将逐步回答与CStringList 相关的各个方面,包括使用方法、常见操作以及示例代码等。
一、什么是CStringList?在介绍具体使用方法前,我们先来了解一下CStringList的基本概念。
CStringList是MFC中的一个类,它是一个模板类,用于管理C-style字符串的链表。
它提供了一系列的成员函数和操作符重载,方便我们对链表进行访问和操作。
二、如何创建和初始化一个CStringList对象?要使用CStringList,首先需要在代码中包含头文件Afxcoll.h,并且使用using声明:cpp#include <afx.h>#include <afxtempl.h>using namespace std;接下来,我们可以通过两种方式创建和初始化一个CStringList对象。
1. 通过默认构造函数创建一个空链表:cppCStringList list;2. 通过将已有的链表作为参数传入构造函数进行初始化:cppCStringList list2(list);这样就可以创建并初始化一个CStringList对象了。
三、常见操作1. 插入元素我们可以使用AddHead和AddTail函数在链表的头部和尾部插入新的元素。
例如:cpplist.AddHead(_T("Hello"));list.AddTail(_T("World"));这样就在链表中插入了两个元素。
2. 获取链表大小可以使用GetCount函数获取链表中的元素个数:cppint count = list.GetCount();3. 访问链表元素CStringList提供了一系列的迭代器(iterator)用于访问链表的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 其中,常用的是第三种方法。 • 【示例8-20】构造一个CTimeSpan类的对象。
8.2.1 CTime类
• 在CTimeSpan类中,有一些常用的函数,如下表所示。
8.2.3 计时器
• 计时器的作用就是用于计时,当到达规定的时间点时,会触发事先设 置好的动作。SetTimer函数用于创建一个计时器,KillTimer函数用于 销毁一个计时器。计时器属于系统资源,使用完应及时销毁。 • SetTimer函数的原型如下:
1.使用默认的构造函数打开文件
2.使用带有一个参数的构造函数打开文件
• CFile类有两个带参数的构造函数。其中,带一个参数的构造函数的原 型如下: • 该构造函数已经打开了一个文件,参数hFile就是打开文件的文件句柄。 该函数将新创建的CFile对象绑定到一个已经打开的文件句柄上。 HFile可以赋值给CFile的成员变量m_hFile。HFile也可以使用 CreateFile()函数打开。CreateFile()函数的原型如下:
பைடு நூலகம்• • •
8.1.10 CString类的类型转换
• CString类型的数据可以转换成其他类型的数据。
1.CString类型转换成整型
• 如果将CString类型的数据转换成整型数据,可以使用atoi()函数。atoi() 函数的原型如下: • 【示例8-14】CString类型转换成整型。
• 运行程序,输出转换后的整型数据114。
8.1.8 字符串的移除
• 在CString类中,想要移除字符串可以调用Remove()和Delete()函数。 其中,Remove()用于从字符串中移除特定的字符。Remove()函数的原 型如下: • 其中,ch表示想要移除的字符。该函数的返回值是返回从字符串中移 走的字符数。如果字符串没有变化,则返回0。
1.使用默认的构造函数打开文件
• CFile类默认的构造函数原型如下: • 如果在构造CFile类的对象采用这个默认的构造函数,那么仅仅创建了 一个对象,而并没有打开文件。此时,需要用到Open()函数。Open() 函数的原型如下:
• lpszFileName:用于指定文件名。 • nOpenFlags:指定打开文件的方式。该参数可以几个值的组合,以 “|”进行分隔。该参数的取值如下表所示。 • pError:指向CFileException对象,用于异常操作。
3.使用带有两个参数的构造函数打开文件
• CFile类的第二个带有参数的构造函数有两个参数,其原型如下: • lpszFileName:表示将要打开的文件的路径名。 • nOpenFlags:表示文件的共享和存取模式。该参数与Open()函数的 nOpenFlags参数完全相同。 • 【示例8-29】使用带有两个参数的构造函数打开文件。
• 在连接字符串时,并不一定都是在字符串的末尾进行连接。此时,应 该使用Insert函数。Insert()函数有两种原型。 • (1)第一种原型如下: • 其中,nIndex用来表示插入字符串的位置,ch表示将要插入的字符串。 该函数的返回值int,表示改变后的字符串的长度。 • (2)第二种原型如下: • 其中,其中,nIndex用来表示插入字符串的位置,pstr表示需要插入的 子链的指针。该函数的返回值int,表示改变后的字符串的长度。
•
• •
运行程序,输出结果为“HELLO!”。 【示例8-2】将指定字符串进行小写转换。
• •
运行程序,输出结果为“hello!”。 由上述两个输出结果看出,MakeUpper()和MakeLower()函数只对字母进行相 应的转换,其他字符不会受到任何影响。
8.1.4 字符串的连接
• 进行字符串的连接有两种方法:一是直接使用“+”进行直接连接,二 是使用Insert()函数进行特殊的插入。下面通过实例对这两种方法进行 具体介绍。
8.3 文件操作类(CFile)
• Visual C++提供的CFile类封装了对文件打开和关闭、读写和定位、删 除、获取文件信息等操作。CFile类是最基本的文件操作类,它的派生 类是CObject。本节将具体介绍CFile如何对文件进行操作。
8.3.1 文件的打开和关闭
• CFile类有两种构造函数,使用默认的构造函数创建一个CFile对象后, 还需要使用Open()函数将文件打开。使用带参数的构造函数创建一个 CFile对象的同时,就将该文件打开了。下面对这两种打开文件的方式 分别进行介绍。
2.使用带有一个参数的构造函数打开文件
• hTemplateFile:为GENERIC_READ访问的模式指定一个句柄到模板 文件。 • lpFileName:指向一个空结尾字符串。该参数指定了用于创建或打开 句柄的对象。 • dwDesiredAccess:指定对象的访问方式。程序可以获得读访问权,写 访问权,读写访问权或者是询问设备(device query)访问权。 • dwShareMode:设置共享模式。 • lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES结构的指针 用于确定如何在子进程中继承这个句柄。如果这个参数是NULL,则 该句柄不可继承。 • dwCreationDisposition:指定当文件存在或者不存在时如何动作。 • dwFlagsAndAttributes:为文件指定属性和标志位。
8.1.2 CString类的成员函数
• 在CString类中,存在大量对字符串进行各种操作的函数。CSting类中 常用函数及其说明如下表所示。
8.1.3 字符串的大小写转换
• 在实际操作中,经常会将字符串进行大小写的转换。CString类中进行大小写 转换的函数分别是:MakeUpper()和MakeLower()函数。其中,MakeUpper()是 大写转化函数,MakeLower()小写转化函数。 【示例8-1】将指定字符串进行大写转换。
8.1.9 CString类的格式化
• 在前面几个例子中,已经用到过Format()函数。该函数就是用于实现字符串的 格式化。Format()函数的原型如下: 其中,fromat用于表示格式化字符串,args表示输出文本。 从上述代码分析,格式化字符串由三部分组成:%、%前的表述性文字和% 后各种格式字符。 在Visual C++中,%后的格式字符有以下几种,如下表所示。
第8章 MFC常用类
• MFC提供了大量封装好的类,其中有一些类不经常使用,但有一些类 使用的频率要高一些。这些类用于处理字符串、日期和时间、文件操 作以及异常等。本章将分别介绍这些类,通过本章的学习,读者可以 熟悉MFC的常用类,并熟练使用这些MFC常用类。
8.1 字符串类(CString)
• CString类是一种用途广泛的数据类型。CString类简化了MFC中的许多 操作,使得操作字符串更加方便。下面将详细介绍CString类对字符串 的具体操作。
8.1.6 字符串的提取
• 在CString类中,提取字符串可以使用Left()、Mid()、Right()3种函数。 三者分别从左边、中间和右边开始提取字符串。3种函数的原型分别 如下:
• 其中,nCount表示开始提取字符串的长度,nFirst代表要提取的开始索 引位置。
8.1.7 字符串的查找
• 在CString中,Find()和ReverseFind()函数用于字符串指定位置的查找。 Find()函数是从一个字符串中查找字符串。Find()函数的原型有几中, 分别如下:
• 其中,ch表示要查找的字符串,nStart表示开始查找的索引值。Find() 函数返回查找到的字符串的位置。 • ReverseFind()函数是从一个字符串的末尾开始查找字符。ReverseFind() 函数的原型如下: • 其中,ch表示要查找的字符。该函数的返回值是查找到的字符串的索 引值。
8.1.1 创建字符串对象
• CString对象采用了动态分配内存的机制。也就是说,在创建CString对 象时,不需对该对象指明内存大小,CString会根据实际情况动态地进 行分配。创建一个CString类对象并为其赋值的方法有以下几种方法。
• 第一种方法是先构造一个CString类的对象,然后再使用赋值语句为其 赋值。 • 第二种方法是在构造CString类对象的同时,直接为其赋值。 • 第三种方法是在构造CString类对象的同时,利用引用来的值为其赋值。 • 第四种方法是在构造CString类对象的同时,采用单字符为其赋值。 • 第五种方法是在构造CString类对象的同时,产生了一个字符串。
•
nIDEvent:表示计时器的ID。由于一个程序中可能存在多个计时器,因此用 此ID号进行标记。
• nElapse:表示时间间隔,单位是ms(毫秒)。 • 第三个参数看起来很复杂,一般情况下,设置其为NULL。
8.2.3 计时器
• 【示例8-24】使用SetTime函数创建一个计时器。 • 由于计时器属于系统资源,因此在使用完应该及时地销毁。在Visual C++中,使用KillTimer函数来销毁所创建的计时器。KillTimer函数的 原型如下: • 【示例8-25】使用KillTimer函数销毁上例所创建的计时器。 • 读者通过阅读上面的内容可以发现,程序只是创建了计时器,而并没 有说明计时器到达规定时间所做的操作。此时,应该使用OnTimer函 数对计时器进行消息处理。
8.1.5 字符串的比较
• 字符串的比较是根据字母对应的ASCII值。当两个字符串进行进行比 较时,首先从第一个字符开始进行比较。如果两个字符串的第一个字 母的ASCII值相同,则比较第二个字母。依此类推,直到比较完为止。 • 在CString类中,比较字符串的函数有两个,分别如下: • • 和 • 其中,Compare()函数在比较时区分大小写,而CompareNoCase()函数 则不区分大小写。