CString_成员函数用法大全(笔记)

CString_成员函数用法大全(笔记)
CString_成员函数用法大全(笔记)

CString 头文件#include

CString的构造函数

CString( );

例:CString csStr;

CString( const CString& stringSrc );

例:CString csStr("ABCDEF中文123456");

CString csStr2(csStr);

CString( TCHAR ch, int nRepeat = 1 );

例:CString csStr('a',5);

//csStr="aaaaa"

CString( LPCTSTR lpch, int nLength );

例:CString csStr("abcdef",3);

//csStr="abc"

CString( LPCWSTR lpsz );

例:wchar_t s[]=L"abcdef";

CString csStr(s);

//csStr=L"abcdef"

CString( const unsigned char* psz );

例:const unsigned char s[]="abcdef";

const unsigned char* sp=s;

CString csStr(sp);

//csStr="abcdef"

CString( LPCSTR lpsz );

例:CString csStr("abcdef");

//csStr="abcdef"

int GetLength( ) const;

返回字符串的长度,不包含结尾的空字符。

例:csStr="ABCDEF中文123456";

printf("%d",csStr.GetLength()); //16

void MakeReverse( );

颠倒字符串的顺序

例:csStr="ABCDEF中文123456";

csStr.MakeReverse();

cout<

将小写字母转换为大写字母

例:csStr="abcdef中文123456";

csStr.MakeUpper();

cout<

void MakeLower( );

将大写字母转换为小写字母

例:csStr="ABCDEF中文123456";

csStr.MakeLower();

cout<

int Compare( LPCTSTR lpsz ) const;

区分大小写比较两个字符串,相等时返回0,大于时返回1,小于时返回-1

例:csStr="abcdef中文123456";

csStr2="ABCDEF中文123456";

cout<

int CompareNoCase( LPCTSTR lpsz ) const;

不区分大小写比较两个字符串,相等时返回0,大于时返回1,小于时返回-1

例:csStr="abcdef中文123456";

csStr2="ABCDEF中文123456";

cout<

int Delete( int nIndex, int nCount = 1 )

删除字符,删除从下标nIndex开始的nCount个字符

例:csStr="ABCDEF";

csStr.Delete(2,3);

cout<

//当nIndex过大,超出对像所在内存区域时,函数没有任何操作。

//当nIndex为负数时,从第一个字符开始删除。

//当nCount过大,导致删除字符超出对像所在内存区域时,会发生无法预料的结果。//当nCount为负数时,函数没有任何操作。

int Insert( int nIndex, TCHAR ch )

int Insert( int nIndex, LPCTSTR pstr )

在下标为nIndex的位置,插入字符或字符串。返回插入后对象的长度

例:csStr="abc";

csStr.Insert(2,'x');

cout<

csStr="abc";

csStr.Insert(2,"xyz");

cout<

//当nIndex为负数时,插入在对象开头

//当nIndex超出对象末尾时,插入在对象末尾

int Remove( TCHAR ch );

移除对象内的指定字符。返回移除的数目

例:csStr="aabbaacc";

csStr.Remove('a');

cout<

int Replace( TCHAR chOld, TCHAR chNew );

int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );

替换字串

例:csStr="abcdef";

csStr.Replace('a','x');

cout<

csStr="abcdef";

csStr.Replace("abc","xyz");

cout<

void TrimLeft( );

void TrimLeft( TCHAR chTarget );

void TrimLeft( LPCTSTR lpszTargets );

从左删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止例:csStr="aaabaacdef";

csStr.TrimLeft('a');

cout<

csStr="aaabaacdef";

csStr.TrimLeft("ab");

cout<

//无参数时删除空格

void TrimRight( );

void TrimRight( TCHAR chTarget );

void TrimRight( LPCTSTR lpszTargets );

从右删除字符,被删的字符与chTarget或lpszTargets匹配,一直删到第一个不匹配的字符为止例:csStr="abcdeaafaaa";

csStr.TrimRight('a');

cout<

csStr="abcdeaafaaa";

csStr.TrimRight("fa");

cout<

//无参数时删除空格

void Empty( );

清空

例:csStr="abcdef";

csStr.Empty();

printf("%d",csStr.GetLength()); //0

BOOL IsEmpty( ) const;

测试对象是否为空,为空时返回零,不为空时返回非零

例:csStr="abc";

cout<

csStr.Empty();

cout<

int Find( TCHAR ch ) const;

int Find( LPCTSTR lpszSub ) const;

int Find( TCHAR ch, int nStart ) const;

int Find( LPCTSTR pstr, int nStart ) const;

查找字串,nStart为开始查找的位置。未找到匹配时返回-1,否则返回字串的开始位置

例:csStr="abcdef";

cout<

cout<

cout<

cout<

cout<

cout<

//当nStart超出对象末尾时,返回-1。

//当nStart为负数时,返回-1。

int FindOneOf( LPCTSTR lpszCharSet ) const;

查找lpszCharSet中任意一个字符在CString对象中的匹配位置。未找到时返回-1,否则返回字串的开始位置例:csStr="abcdef";

cout<

CString SpanExcluding( LPCTSTR lpszCharSet ) const;

返回对象中与lpszCharSet中任意匹配的第一个字符之前的子串

例:csStr="abcdef";

cout<

CString SpanIncluding( LPCTSTR lpszCharSet ) const;

从对象中查找与lpszCharSe中任意字符不匹配的字符,并返回第一个不匹配字符之前的字串

例:csStr="abcdef";

cout<

int ReverseFind( TCHAR ch ) const;

从后向前查找第一个匹配,找到时返回下标。没找到时返回-1

例:csStr="abba";

cout<

void Format( LPCTSTR lpszFormat, ... );

void Format( UINT nFormatID, ... );

格式化对象,与C语言的sprintf函数用法相同

例:csStr.Format("%d",13);

cout<

TCHAR GetAt( int nIndex ) const;

返回下标为nIndex的字符,与字符串的[]用法相同

例:csStr="abcdef";

cout<

//当nIndex为负数或超出对象末尾时,会发生无法预料的结果。

void SetAt( int nIndex, TCHAR ch );

给下标为nIndex的字符重新赋值

例:csStr="abcdef";

csStr.SetAt(2,'x');

cout<

//当nIndex为负数或超出对象末尾时,会发生无法预料的结果。

CString Left( int nCount ) const;

从左取字串

例:csStr="abcdef";

cout<

//当nCount等于0时,返回空。

//当nCount为负数时,返回空。

//当nCount大于对象长度时,返回值与对象相同。

CString Right( int nCount ) const;

从右取字串

例:csStr="abcdef";

cout<

//当nCount等于0时,返回空。

//当nCount为负数时,返回空。

//当nCount大于对象长度时,返回值与对象相同。

CString Mid( int nFirst ) const;

CString Mid( int nFirst, int nCount ) const;

从中间开始取字串

例:csStr="abcdef";

cout<

csStr="abcdef";

cout<

//当nFirst为0和为负数时,从第一个字符开始取。

//当nFirst等于对象末尾时,返回空字串。

//当nFirst超出对象末尾时,会发生无法预料的结果。

//当nCount超出对象末尾时,返回从nFirst开始一直到对象末尾的字串

//当nCount为0和为负数时,返回空字串。

LPTSTR GetBuffer( int nMinBufLength );

申请新的空间,并返回指针

例:csStr="abcde";

LPTSTR pStr=csStr.GetBuffer(10);

strcpy(pStr,"12345");

csStr.ReleaseBuffer();

pStr=NULL;

cout<

//使用完GetBuffer后,必须使用ReleaseBuffer以更新对象内部数据,否则会发生无法预料的结果。

void ReleaseBuffer( int nNewLength = -1 );

使用GetBuffer后,必须使用ReleaseBuffer以更新对象内部数据

例:csStr="abc";

LPTSTR pStr=csStr.GetBuffer(10);

strcpy(pStr,"12345");

cout<

csStr.ReleaseBuffer();

cout<

pStr=NULL;

//CString对象的任何方法都应在ReleaseBuffer之后调用

LPTSTR GetBufferSetLength( int nNewLength );

申请新的空间,并返回指针

例:csStr="abc";

csStr.GetBufferSetLength(20);

cout<

count<

csStr.ReleaseBuffer();

count<

//使用GetBufferSetLength后可以不必使用ReleaseBuffer

成员函数、非成员函数和友元函数介绍

成员函数、非成员函数和友元函数介绍 一、成员函数、非成员函数和友元函数 成员函数和非成员函数最大的区别在于成员函数可以是虚拟的而非成员函数不行。 成员函数的优势是能够方便的进行动态绑定,实现多态。 说明一个函数为一个类的友元函数则该函数可以访问此类的私有数据和方法。 二、成员函数介绍 1、显式构造函数 C++中的e xplicit关键字用来修饰类的构造函数,表明该构造函数是显式的。 隐式构造函数能够实现将该构造函数对应数据类型的数据转换为该类对象。 class MyClass { public: MyClass( int num); } MyClass obj = 10; //ok,convert int to MyClass 如果在构造函数前加上关键字explicit,上述编译出错。 2、静态函数: 类中,static型的成员函数,由于是类所拥有的,而不是具体对象所有的。 静态函数屏蔽了this指针,因此,如果成员函数作为回调函数,就应该用static去修饰它。 3、虚函数: 虚函数首先是一种成员函数,它可以在该类的派生类中被重新定义并被赋予另外一种处理功能。 注意多态不是函数重载。函数重载属于静态绑定,虚函数实现多态是动态绑定。 4、纯虚函数: 在抽象类中定义纯虚函数,必须在子类实现,不过子类也可以只是声明为纯虚函数,由 子类的子类实现。 5、协变返回类型: 一般来说,一个重写的函数与被它重写的函数必须具有相同的返回类型。 这个规则对于”协变返回类型(covariant return type)”的情形来说有所放松. 也就是说,若B是一个类类型,并且一个基类虚拟函数返回B *,那么一个重写的派生类函数可以返回D *, 其中的D公有派生于B(即D是一个(is-a)B).若基类虚函数返回B &,那么一个重写的派生类函数可以返回一个D&. 考虑如下一个shape层次结构的clone操作: Class Shape { Public: //… Virtual Shape *clone () const = 0; //prototype(原型) //… }; Class Circle : public Shape {

小学常考标点符号用法整理

这些常考标点符号用法,务必让孩子掌握 标点符号是语文学习不可缺少的内容,标点符号掌握得不好,不仅会影响孩子的作文写作,还会影响孩子的语言表达。 正确使用标点符号很重要,在平时的学习中,这些常用标点符号的用法,老师家长一定要教会孩子! 一句末尾用句号,语气平缓调不高。 读书见它要停顿,作文断句莫忘掉。 基本用法 1.用于句子末尾,表示陈述语气。使用句号主要根据语段前后有较大停顿、带有陈述 语气和语调,并不取决于句子的长短。 示例1:北京是中华人民共和国的首都。 2.示例2:(甲:咱们走着去吧?)乙:好。 2. 有时也可表示较缓和的祈使语气和感叹语气。 示例1:请您稍等一下。 示例2:我不由地感到,这些普通劳动者也同样是很值得尊敬的。 常见错误 1. 当断不断,一逗到底。 2. 不当断却断了,割裂了句子。 如:生产成本居高不下的原因,一个是设备落后,能耗高。另一个是管理不善,浪费严重。("能耗高"后面的句号应改作逗号) 当选项较多或较长,或有意突出每个选项的独立性时,也可每个选项之后都用问号。 示例1:诗中记述的这场战争究竟是真实的历史描述,还是诗人的虚构? 示例2:这是巧合还是有意安排? 示例3:要一个什么样的结尾:现实主义的?传统的?大团圆的?荒诞的?民族形式的?有象征意义的? 示例4:(他看着我的作品称赞了我。)但到底是称赞了我什么:是有几处画得好?还是什么都敢画?抑或是一种对于失败者的无可奈何的安慰?我不得而知。 示例5:这一切都是由客观的条件造成的?还是由行为的惯性造成的? 3. 在多个问句连用或表达疑问语气加重时,可叠用问号。 通常应先单用,再用叠用,最多叠用三个问号。在没有异常强烈的情感表达需要时不宜叠用问号。 示例:这就是你的做法吗?你这个总经理是怎么当的??你怎么竟敢这样欺骗消费者??? 4. 问号也有标号的用法,即用于句内,表示存疑或不详。 示例1:马致远(1250?—1321),大都人,元代戏曲家、散曲家。

java String类的用法

1 String 类的用法 public class SetStringValue { /** * @param args */ public static void main(String[] args) { String str1=new String("Java是当今最流行的编程语言之一");//截取数组 String str2="java是优秀的技术"; char[] szStr={'H','e','l','l','o',',','j','a','v','a'}; String str3=String.copyValueOf(szStr);//复制数组,所有数组。 String str4=String.copyValueOf(szStr,6,4);//所取数组,开始位置,所取个数 System.out.println(str1); System.out.println(str2); System.out.println(str3); System.out.println(str4); // TODO Auto-generated method stub } } 2 public class StringPool { /** * @param args */ public static void main(String[] args) { String str1="Good!"; String str2="Good!"; String str3=new String("Good!"); if(str1==str2)//判断地址是否相同 { System.out.println("str1=str2");//地址相同则输出相等

MFC——4个基本类中的成员函数介绍.docx

09121852杜军机械设计及理论 1. CMainFrame ActivateFrame使框架对用户可视并可用 CalcWindowRect每当主框架窗I I的客户区尺寸发生变化或控制条的位置发生变 化,需要重新排列客户区时,调用该函数 Create调用以构造和初始化一个与CFrameWnd对象有关的Windows框架窗口DefWindowProc该函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消 息提供缺省的处理 DestroyWindow销毁指定的窗口 DoDataExchange UpdateData会调用这个函数,调用它来初始化对话框的控件或更新数据 GetActiveDocument得到当前文档的指针 GetActiveFrame 返回活动CFrameWnd 对象 GetScrollBarCtrl调用这个成员函数以获取指定的了滚动控件或分隔窗I I的指针LoadFrame调用以从资源信息屮动态构造一个框架窗口 OnAmbientProperty框架调用这个成员函数以从包含OLE控件的窗口获得ambient属性值。重载这个函数以改变OLE控件容器向它的控件返回的缺省ambient属性值。任何没冇被重载函数处理的ambient属性请求将被传递到慕类的实现中OnChildNotify该函数为重载函数,作为部分消息映射被调用,告诉父窗口即将被告知一个窗口刚刚被创建 OnCmdMsg该函数的功能首先按字节对消息进行排序,对于WM_COMMAND 消息,调用OnCommand消息响应函数,对于WM_NOTIFY消息调用OnNotify 消息响应函数。任何被遗漏的消息将是一个窗I I消息。OnWndMsg函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。如果OnWndMsg函数不能找到这样的处理函数的话,则把消息返冋到WindowProc函数,由它将消息发送给DefWindowProc函数 OnCommand该函数查看这是不是一个控件通知,如果它是,OnCommand函数会试图将消息映射到制造通知的控件;如杲他不是一个控件通知,OnCommand 就会调用OnCmdMsg函数 OnCreateClient为框架构造一个用户窗口 OnFinalRelease木函数在对对象的最后一个OLE参考或对象对别人的后一个OLE 参考被释放时,由框架调用 OnNotify框架调用这个函数以通知控件的父窗I」,在控件中发生了一个事件,或者该控件需要某些类型的信息。OnNotify处理控件通知的消息映射OnSetPreviewMode 设置应用的主框架成为或退出预打印模式 PostNcDestroy在窗口被销毁以后,缺省的OnNcDestroy成员函数调用这个函数。派生类可以利用这个函数來执行自定义的清除工作,比如删除指针PreCreateWindow该函数是一个重载函数,在窗I I被创建而,可以在该重载函数屮改变创建参数 PreSubclassWindow这也是一个重载函数,允许首先子分类一个窗口PreTranslateMessage 在消息被分派至U Windows 函数TranslateMessage 和

常用符号的调出

常用符号的调出 平时经常要输入一些像“★”、“√”之类的特殊符号,或是“壹万贰仟叁佰肆拾伍元”之类的大写金额,很多朋友不知道该如何通过常用输入法快速输入,另外在使用输入法过程中,也时常会出现用五笔输入时有些字不会拆分,用拼音输入时有些字不会读音的情况,这时又该如何来快速输入这些疑难字呢?我们把大家常用的输入法汇集在一起,介绍一下如何解决这些常见的特殊输入问题。同时对于大家选择适合自己的输入法也是一个很好的参考。 小提示 很多朋友在使用输入法时,会发现一些文字明明拆分或拼音都输入正确了,但就是打不出需要的字,这时你需要检查一下输入法的设置,确认已经打开“GBK”编码,通常为了减少重码,输入法默认使用的是gb2312编码,这种情况下只能输入6763个常用汉字。 五笔输入法 一、极点中文 1.输入特殊符号 首先可以按下Shift+Esc组合键快速调出软键盘,按住Shift键后按动Esc键,就会在多个软键盘之间切换,按Esc键即可关闭软键盘。 极点中文把特殊符号分为22种类型,并进行了特殊编码,其编码定义的基本规则是两个字母“Z”加上代表特殊符号类型的两个声母,常用的特殊符号编码有(全部编码可查阅帮助文档): zzbd 标点符号zzpy 拼音符号zzts 特殊符号 zzsx 数学符号zzdw 单位符号zzjt或zzj 箭头符号 zzys或zzy 圆圈数字zzpp 偏旁

例如要输入“★”符号,则可以键入“zzts”,然后根据提示条中的显示按“6”即可使符号上屏(见图1)。 小提示 我们可以在极点中文提示条上右击,选择菜单“管理工具→用户码表”来对默认的特殊符号编码进行修改,同时也可以自行添加新的编码。 2.输入中文日期 在极点中文中输入中文日期是非常方便的,其编码格式为分号“;”加上“XXXXnXXyXX r”,其中的X分别代表要输入的年月日数字。例如要输入“二○○五年四月一日”,则键入编码“;2005n4y1r”,这时在提示条中会显示出数字日期和中文日期两种格式,按下数字“2”即可输入中文日期了(见图2)。 小提示 要使用该功能,需要在极点中文的基本设置中选择“快捷英文热键”为“分号(;)”才行,不过这样设置后,输入中文分号“;”就需要按两下“;”键了。 如果想快速输入当前日期,那就更方便了,键入编码“znyr”可以输入当前年月日,键入编码“year”可以输入当前年份,键入编码“date”可以输入当前日期,键入编码“time”可以输入当前时间,键入编码“now”则可以输入当前精确时间,键入编码“week”可以输入当前星期几。 3.输入大写数字和金额 极点中文的大写数字编码规格是分号“;”加上数字序列,例如当键入“;12345”时,提示条中会显示三种大写数字格式(见图3),选择需要使用的格式即可,按“回车”键选择第一项,

STRING类函数用法总结3

C++中的string类 前言:string的角色 1string使用 1.1充分使用string操作符 1.2眼花缭乱的string find函数 1.3string insert,replace,erase2string和C风格字符串 3string和Charactor Traits 4string建议 5小结 6附录前言:string的角色 C++语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触perl,php,和Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。 举例来说,如果文本格式是:用户名电话号码,文件名name.txt Tom23245332 Jenny22231231 Heny22183942 Tom23245332 ... 现在我们需要对用户名排序,且只输出不同的姓名。 那么在shell编程中,可以这样用: awk'{print$1}'name.txt|sort|uniq 简单吧? 如果使用C/C++就麻烦了,他需要做以下工作: 先打开文件,检测文件是否打开,如果失败,则退出。 声明一个足够大得二维字符数组或者一个字符指针数组 读入一行到字符空间 然后分析一行的结构,找到空格,存入字符数组中。 关闭文件 写一个排序函数,或者使用写一个比较函数,使用qsort排序 遍历数组,比较是否有相同的,如果有,则要删除,copy... 输出信息 你可以用C++或者C语言去实现这个流程。如果一个人的主要工作就是处理这种

CString类所有成员函数详解

CString类所有成员函数详解 2009-03-27 10:53 CString类所有成员函数详解 VC里CString是我们最常用的类之一,我们觉得对它很熟悉了,可是你知道它的所有用法吗? 还是系统的学习一下吧,认真看完本文就OK了。 下面开始: CString::Compare int Compare( LPCTSTR lpsz ) const; 返回值字符串一样返回0 小于lpsz 返回-1 大于lpsz 返回1 区分大小字符 CString s1( "abc" ); CString s2( "abd" ); ASSERT( https://www.360docs.net/doc/541591422.html,pare( s2 ) == -1 ); ASSERT( https://www.360docs.net/doc/541591422.html,pare( "abe" ) == -1 ); CString::CompareNoCase int CompareNoCase( LPCTSTR lpsz ) const; 返回值字符串一样返回0 小于lpsz 返回-1

大于lpsz 返回1 不区分大小字符 CString::Collate int Collate( LPCTSTR lpsz ) const; 同CString::Compare CString::CollateNoCase int CollateNocase( LPCTSTR lpsz ) const; 同CString::CompareNoCase CString::CString CString( ); CString( const CString& stringSrc ); CString( TCHAR ch, int nRepeat = 1 ); CString( LPCTSTR lpch, int nLength ); CString( const unsigned char* psz ); CString( LPCWSTR lpsz ); CString( LPCSTR lpsz ); 例子最容易说明问题 CString s1; CString s2( "cat" ); CString s3 = s2; CString s4( s2 + " " + s3 ); CString s5( 'x' ); // s5 = "x"

在名字空间中声明类和成员函数

在名字空间中声明类和成员函数 赵湘宁 虽然很多程序员都熟悉名字空间的概念,但他们常常都是被动地使用名字空间。也就是说他们使用的是第三方定义的成员(如标准库的类和函数),而不是在名字空间中声明自己的类和函数。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。 名字空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。例如: namespace proj_alpha { //下面是名字空间proj_alpha 的成员 class Spy {/*..*/}; void encrypt (char *msg); const int MAX_SPIES = 8; } 在上面的例子中,类Spy在一个单独的文件中实现。通常,你是在一个专门的头文件中声明一个类并在不同的源文件中独立地定义其成员函数。那么如何将名字空间成员类分离成多个源文件呢? 下面是名为Foo.hpp 的头文件,其中定义了一个名为NS的名字空间,它包含类Foo的声明: //Foo.hpp namespace NS { class Foo { public: void f(); void g(); }; }//close NS 另外,在一个单独的源文件Foo.cpp中,首先包含头文件Foo.hpp以便实现类Foo的成员函数f()和g(): //Foo.cpp #include "Foo.hpp" void NS::Foo::f() { /*..*/ } void NS::Foo::g()

{ /*..*/ } 为了使用名字空间成员,必须使用成员的全路径名,它由名字空间后跟::合成原名组成。因此,类Foo的全路径名是NS::Foo。这样编译器便可以知道NS是一个名字空间名,头文件Foo.hpp必须在引用NS之前被包含。 名字空间是可以扩展的。也就是说可以声明类,而且所声明的类在其它的.cpp文件中是相同的名字空间成员: //Bar.hpp namespace NS //扩展NS { class Bar { public: void a(); void b(); }; } 在Bar.cpp文件中: #include "Bar.hpp" void NS::Bar::a() {/*..*/} void NS::Bar::b() {/*..*/} 可以看出,虽然Foo和Bar这两个类在不同的头文件中声明,但它们都是名字空间NS的成员。并且编译器和链接器将这两个类看成是同一名字空间的成员。那么,如何在应用程序中使用这些类呢? 在文件main.cpp中,必须要包含声明类Foo和Bar的头文件并加上相应的名字空间引用声明-using: #include "Bar.hpp" #include "Foo.hpp" int main() { using NS::Bar; //使用名字空间 using NS::Foo; //同上 Bar b;

string类的使用教程

这个是string类的使用教程,可以参考一下 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用= 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题……… 首先,为了在我们的程序中使用string类型,我们必须包含头文件。如下:#include //注意这里不是string.h string.h是C字符串头文件 1.声明一个C++字符串 声明一个字符串变量很简单: string Str; 这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下: a) string s; //生成一个空字符串s b) string s(str) //拷贝构造函数生成str的复制品 c) string s(str,stridx) //将字符串str内“始于位置stridx”的部分当作字符串的初值 d) string s(str,stridx,strlen) //将字符串str内“始于stridx且长度顶多strlen”的部分作为字符串的初值 e) string s(cstr) //将C字符串作为s的初值 f) string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s 的初值。 g) string s(num,c) //生成一个字符串,包含num个c字符 h) string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值 i) s.~string() //销毁所有字符,释放内存 都很简单,我就不解释了。 2.字符串操作函数 这里是C++字符串的重点,我先把各种操作函数罗列出来,不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数,再到后面看他的详细解释。 a) =,assign() //赋以新值 b) swap() //交换两个字符串的内容 c) +=,append(),push_back() //在尾部添加字符 d) insert() //插入字符 e) erase() //删除字符 f) clear() //删除全部字符 g) replace() //替换字符 h) + //串联字符串 i) ==,!=,<,<=,>,>=,compare() //比较字符串 j) size(),length() //返回字符数量

一种使类成员函数成为 Windows 回调函数的方法

问题:一种使类成员函数成为Windows 回调函数的方法( 积分:100, 回复:62, 阅读:3393 ) 分类:Object Pascal ( 版主:menxin, cAkk ) 来自:savetime, 时间:2004-6-20 2:41:00, ID:2672562 [显示:小字体| 大字体] 一种使类成员函数成为Windows 回调函数的方法 https://www.360docs.net/doc/541591422.html, savetime2k@https://www.360docs.net/doc/541591422.html, 2004.6.20 本文排版格式为: 正文由窗口自动换行;所有代码以80 字符为边界;中英文字符以空格符分隔。 未经作者同意请勿在在任何公共媒体转载 大富翁satanmonkey 提出一个问题:HOOK 的时候,那个回调函数怎么弄才能做成类的成员?现在回调函数不能是类成员函数,访问不了类的成员变量。 https://www.360docs.net/doc/541591422.html,/delphibbs/dispq.asp?lid=2624773 后来又在另一篇贴子上也看到类似的问题,看来解决这个问题还有点用(我现在还不知道这有什么用处),所以趁着今天周末思考一下。 (太想睡了,下面只好草率地说明,如有不清楚请提问,或者日后有空再详作解释) 一开始我的想法是在类成员的回调函数内部复制参数的值,差不多理顺了,后来发现如果回调函数有返回值时,这种方法不行... 只好重新开工,用手工编制机器码的方法完成,其中查询JMP $00001111 这样的立即数跳转机器指令花了一个小时,结果是没有找到,只好以JMP [$00001111] 这个代码代替。如果有谁知道前一种跳转指令的机

C++ string类专题(修订版)

本文作者:黄邦勇帅(编著)(原名:黄勇) 本文是学习C++的附加内容,主要介绍了C++中的string类的各种成员函数,及成员函数的功能与作用,是作为学习C++的参考使用的。 本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正 本文使用的是x86机器(主流计算机都是x86机器),windows xp操作系统,VC++2010编译器进行讲解的。 本文内容完全属于个人见解与参考文现的作者无关,限于水平有限,其中难免有误解之处,望指出更正。 声明:禁止抄袭,复印,转载本文,本文作者拥有完全版权。 主要参考文献: 1、C++.Primer.Plus.第五版.中文版[美]Stephen Prata著孙建春韦强译人民邮电出版社 2005年5月 2、C++.Primer第四版.中文版 Stanley B.Lippman、Barbara E.Moo、Josee Lajoie著李师贤、蒋爱军等译人民邮电出版社 2006年3月 3、C++.Primer第三版.中文版 Stanley B.Lippman、Josee Lajoie著潘爱民、张丽等译中国电力版社 2002年5月 第19部分 string类专题(共9页) (2016-7-15 修订版) 1、string类用于处理字符串,用于代替使用不方便的C风格字符串,使用string类表示的字符串我们可以像处理普通 变量那样处理字符串,因此可以对string类表示的字符串进行直接的相加,比较,赋值等操作,比如string s1=”abc”,s2=”def”;则s1=s1+s2;结果s1=”abcdef”;s1=s2;则结果s1=”def” 等,C风格字符串只能使用内置的库函数进行这些操作,使用很不方便,比如char c1[]=”abc”; char c2[]=”def”;则c1=c2;错误,不能改变数组的地址,c1>c2比较的是两个指针的地址而不是字符的大小;c1+c2;错误,这是把两个指针的地址相加而不是把两个字符数组相加。 2、string对象创建的字符串的最大特点是:可以自动调整对象大小以适应所需的字符串,string对象能存储的最大字符 数由string类的静态常量string::npos设定,通常是最大的unsigned int值。 一、string类的原型 1、要使用string类需要包含string头文件。 2、string是一个模板类,因此它具有类和模板的特性,也就是说string类有构造函数、重载的操作符、成员函数等, 因为string是模板类,因此应建一个模板类具体实例化版本的对象才能使用,然后通过对象调用成员函数使用类。 3、记住string s;创建的s是一个类的对象,而不是字符串字面值,他们是两种不同的类型。 4、string类是模板类basic_string类的char特化体版本使用typedef命名后的别名,wstring类是模板类basic_string的 wchar特体化版本使用typedef命名后的别名。 5、basic_string类的原型为(重点): template, class Allocator=allocator > class basic_string; 1)、charT是个类型模板形参,若实例化时传递char类型,则charT=char,传递wchar则charT=wchar 2)、traits是类型模板形参,描述了字符串的特征,比如字符串是否以’\0’作为结束尾等。traits要求传递一个 char_traits的模板类型作为实参。 3)、Allocator也是个类模板形参,他的主要作用是用于处理字符串的内存分配问题,默认使用new和delete分配内 存。Allocator要求传递一个allocator类型的模板类型作为实参。 4)、basic_string有两个特化体版本(重点),如下所示,当然我们也可以实例化其他类型版本的base_string类模板, ①、typedef base_string string; //即string类是使用typedef重命名后的basic_string类模板的char特化体版本。 ②、typedef base_string wstring; //主要用于处理宽字符串。 6、size_type类型(重要):size_type是basic_string类中定义的类型,一般被定义为unsigned类型。需要使用限定名的 方法来使用size_type类型,比如string::size_type a;或basic_string::size_type a; 7、npos静态常量(重要):表示string对象能够存储的最大字符数,其形式为:static const size_type npos=-1; 可见npos 是basic_string类中定义的静态常量,其类型为size_type其值为-1,对于无符号的size_type变量,赋值为-1,相当于是把最大的无符号数赋值给了他。 二、string类的构造函数 1、basic_string的构造函数与char特化版本的string构造函数的差别,只在于basic_string构造函数多了一个用于分配

标点符号的各个用法总复习

标点符号的各个用法总复习 一、基本用法:掌握逗号、句号、顿号、问号、感叹号、冒号、引号、省略号、书名号和分号这十种标点符号。现将这十种标点符号的用法作如下介绍: (一)逗号[用,表示]用来表示一句话中间的停顿,占一格,点在格的左下方。例:我们都是来自五湖四海,为了一个共同的革命目标,走到一起来了。 (二)句号[用。表示]表示一句话说完之后的停顿。它一般用在陈述句和不带明显的命令口气的祈使句的末尾,占一格,点在格的左下方。 例1 :刘胡兰是一位闻名全国的女英雄。例2:请递给我一杯水。(祈使句) (三)顿号[用、表示]表示句子中并列词语之间较小的停顿,占一格,点在格的左下方。这里需要注意的是:句子中并列成分,比较小的停顿用顿号,而较长的停顿用逗号,两者之间的区别在于停顿的长短。 例:总攻开始了,军号声、枪声、炮声、喊杀声,立刻混成一片,震动着山谷。 (四)问号[用?表示]表示一句问话完了之后的停顿,用问号,问号占一格,点在格的中间。不论是疑句,还是设问、反问,当问句的意思表示完了,就用问号表示停顿。 例:①你叫什么名字?(疑问)②这不是伟大的奇观吗?(反问) ③是谁创造了人类世界?是我们的劳动群众。(设问) (五)感叹号[用!表示]表示感情强烈的句子完了之后的停顿,用感叹号。感叹号一般用在感叹句和祈使句的末尾,占一格,点在格的中间。凡是感情色彩比较浓的句子,诸如喜爱、赞美、悲伤、怀念、请求、命令、愤怒、惊讶等,在一句话说完后,应该用感叹号表示停顿。例:①您就让我再试一试吧!(请求)②我的“小咪咪”多可爱啊!(喜爱)③什么,“迷糊”也考了一百分!(惊奇) ④你们坐在敌人只要一发炮弹就能送你们升天的地方,还在忙什么别的事!乱弹琴!(气愤)⑤他白了我一眼,说:“别动!”(命令) (六)冒号[用:表示]主要用于句子中表示提示、总结之后的停顿,占一格,点在格的左下方。由于冒号主要有以下用途: (1)冒号用于引述语之前,表示后面是所要说的话或引用别人的话。例:毛泽东主席宣布:“中华人民共和国中央人民政府今天成立了!” (2)冒号用于提示语或总结语之后,表示后面还有话说。 例:商店里什么都有:服装、布匹、文具、食品…… (3)冒号还用于书信的称呼之后,其作用也是表示提示。 例1、敬爱的解放军叔叔:2、颜黎民君: (4)用在解释性的分句之前,具有解释说明的作用。如:不过只看一个人的著作,结果是不大好的:你就得不到多方面的优点。 (5)用在总提与分述之间,使两者眉目清楚。 如:我决心做到以下几点:一、每天按时做好作业;二、看一些儿童读物…… (6)用在动词谓语和较长的宾语之间,便于阅读理解。如:我知道:越是在艰苦的时候,战士们越关心自己的领导。 (七)引号:引号表示文中的引用部分,就形式而言,分为双引号[用“”表示]和单引号[‘ ']两种。一般说,单独使用引号用双引号,而引用的话中还需要用引号时,外面用双引号,里面用单引号。 例:赵大叔拍了拍牛头说:“累不累,‘独角龙'? 小学阶段引号的用法主要有以下三种:

Qt 的QString类的使用

Qt 的QString类的使用Qt的QString类提供了很方便的对字符串操作的接口。 1.使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替。 QString::fill ( QChar ch, int size = -1 ) 例: QString str = "Berlin"; str.fill('z'); // str == "zzzzzz" str.fill('A', 2); // str == "AA" 2,从字符串里查找相同的某个字符串str。 int QString::indexOf ( const QString & str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive ) const 例如: QString x = "sticky question"; QString y = "sti"; x.indexOf(y); // returns 0 x.indexOf(y, 1); // returns 10 x.indexOf(y, 10); // returns 10 x.indexOf(y, 11); // returns -1 3指定位置插入字符串 QString & QString::insert ( int position, const QString & str ) 例如: QString str = "Meal"; str.insert(1, QString("ontr")); // str == "Montreal" 3,判断字符串是否为空。 bool QString::isEmpty () const 如: QString().isEmpty(); // returns true QString("").isEmpty(); // returns true QString("x").isEmpty(); // returns false QString("abc").isEmpty(); // returns false

C++常数据(函数)成员精讲

C++常数据成员精讲—const关键字 更多内容:h t t p://w w w.c c t w l.c o m/ 内容提要: 用const修饰的定义对象称为常对象; 用const修饰的声明成员函数称为常成员函数; 用const修饰的声明数据成员称为常数据成员。 变量或对象被const修饰后其值不能被更新。因此被const修饰的变量或对象必须要进行初始化。 用const修饰的声明数据成员称为常数据成员。 有两种声明形式: const int cctwl; int const cctwl; int cctwl const; //这样是错误的只能有以上两种声明形式。不能省略数据类型,可以添加public private等访问控制符。 说明: 1.任何函数都不能对常数据成员赋值。 2.构造函数对常数据成员进行初始化时也只能通过初始化列表进行。 3.常数据成员在初始化时必须赋值或称其必须初始化. 4.如果类有多个默认构造函数必须都初始化常数据成员。 通过下面例子来理解常数据成员以上4点。 A、请指出下面程序的错误 class A

{ private: int w,h; const int cctwl=5; //错误一 public: }; void main() { A a ; //错误二 cout<< "sss"; system("pause"); } 错误一:不能对常数据成员在类中初始化、要通过类的构造函数,只有静态常量才能这样初始化。 错误二:没有合适的默认构造函数可用。因为有常量cctwl没有初始化必须初始化所有常数据成员。 更正后结果如下: class A{ private: int w,h; const int cctwl; public: const int cctwlcom;//常对象可以是共有私有等访问权限

如何让类的成员函数作为回调函数

如何让类的成员函数作为回调函数 为什么类(class)的成员函(member function)数不能作为回调函数(callback function) 首先来看看回调函数有怎样的特点。windows中,回调函都显式(explicit)使用CALLBACK修饰符(decorator)修饰 (decorated)。实际上CALLBACK就是_stdcall 参数传递方式(calling convention)的宏定义。MSDN中对__stdcall做了如下定义: The __stdcall calling convention is used to call Win32 API functions. The callee cleans the stack, so the compiler makes vararg functions __cdecl. Functions that use this calling convention require a function prototype. 其中心思想是,__stdcall修饰的函数,参数从右至左依次压入堆栈,被调用者(callee)负责平衡堆栈(clean also called ‘stack unwinding handling’)。 下面来看看类的成员函数有怎样的特点。在VC++中,所有类的成员函数在定义的时候都被隐式(implicit)定义为__thiscall参数传递方式。在MSDN 中对 __thiscall做了如下定义: The __thiscall calling convention is used on member functions and is the default calling convention used by C++ member functions that do not use variable arguments. Under __thiscall, the callee cleans the stack, which is impossible for vararg functions. Arguments are pushed on the stack from

特殊数学符号大全和使用word经验

1 几何符号 ?ⅷⅶ????△ 2 代数符号 ⅴⅸⅹ~?????ⅵ? 3运算符号 ×÷ⅳ± 4集合符号 ??ⅰ 5特殊符号 ⅲι(圆周率) 6推理符号 |a| ??△ⅶ????±?? ⅰ? ???↖↗↘↙ⅷⅸⅹ &; § ??←↑→↓??↖↗ ΓΔΘΛΞΟΠΣΦΧΨΩ ???????αβγδε ζ ηθικλμνξοπρ ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ

ⅰⅱⅲ?ⅳⅴⅵ? ⅶ?ⅷⅸⅹ???? ????????????????⊕?? ??℃ 指数0123:o123 上述符号所表示的意义和读法(中英文参照) + plus 加号;正号 - minus 减号;负号 ± plus or minus 正负号 × is multiplied by 乘号 ÷ is divided by 除号 = is equal to 等于号 ? is not equal to 不等于号 ? is equivalent to 全等于号 ? is approximately equal to 约等于 ? is approximately equal to 约等于号 < is less than 小于号 > is more than 大于号 ? is less than or equal to 小于或等于 ? is more than or equal to 大于或等于 % per cent 百分之… ⅵ infinity 无限大号 ⅳ (square) root 平方根

X squared X的平方 X cubed X的立方 ? since; because 因为 ? hence 所以 ⅶ angle 角 ? semicircle 半圆 ? circle 圆 ○ circumference 圆周 △ triangle 三角形 ? perpendicular to 垂直于 ? intersection of 并,合集 ? union of 交,通集 ? the integral of …的积分 ⅲ (sigma) summation of 总和 ° degree 度 ′ minute 分 〃 second 秒 # number …号 @ at 单价 *标点符号:

CDC类的主要绘图成员函数

CDC类的主要绘图成员函数 CDC类中常用绘图函数 1)绘制像素函数 原型:COLORREF SetPixel(int x,int y,COLORREF crColor ); 设置某像素点的RGB值 2)获取像素颜色函数 原型:COLORREF GetPixel(int x,int y)const; 返回值:指定像素的RGB值。 参数说明:得到指定像素的RGB颜色值 一、画笔函数 画笔是用来绘制直线、曲线或图形的边界线,是绘图工具类之一 画笔通常具有线型、宽度和颜色三种属性 画笔的线型通常有实线、虚线、点线、点划线、双点划线、不可见线和内框架线7种,这些线型都是以PS_为前缀的预 定义标识符 默认的画笔是一个像素单位的黑色实线 要想更换画笔,可以在创建新画笔对象后,将其选入设备上下文,就可使用新画笔进行绘图。 1)创建画笔函数 原型:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor);

返回值:非零。 参数说明: 第一个参数nPenStyle是画笔的风格代码 第二个参数nWidth是画笔的宽度 第三个参数crColor是画笔的颜色。 PS_SOLID;实线;宽度任意指定 PS_DASH;虚线;宽度1(不可任意指定) PS_DOT;点线;宽度1(不可任意指定) PS_DASHDOT;点划线;宽度1(不可任意指定) PS_DASHDOTDOT;双点画线;宽度1(不可任意指定) PS_NULL;不可见线;宽度1(不可任意指定) PS_INSIDEFRAME;内框架线;宽度任意指定 2)选择画笔函数 原型:Cpen *SelectObject(Cpen *pPen); 返回值:被替代画笔的指针。 参数说明:参数pPen是Cpen类的被选中的新画笔对象指针。本函数把原画笔换成新画笔,同时返回指向原画笔的指针。 3)删除画笔函数 原型:BOOL DeleteObject( ); 返回值:非零。 参数说明:画笔使用完毕,把已成自由状态的画笔从系统内存中清除。 4)选择一支库画笔函数 原型: virtual CGdiObject *SelectStockObject(int nIndex); 返回值:被替代的CGdiObject类对象的指针。 参数说明:参数nIndex是库笔代码 Windows系统中准备了一些使用频率较高的画笔,不需要创建,可以直接选用。同样,使用完库画笔时也不需要调用 DeleteObject()函数从内存中删除已使用过的画笔。 三种常用库笔:BLACK_PEN宽度为1的黑笔实线笔;WHITE_PEN宽度为1的白笔实线笔;NULL_PEN透明笔 二、画刷函数(图形内部进行填充) 1)创建实体画刷函数 BOOL CreateSolidBrush(COLORREF crColor ); 选择画刷函数 2)CBrush *SelectObject(CBrush *pBrush ); 删除画刷函数 3)BOOL DeleteObject( ); 创建阴影画刷函数 4)BOOL CreateHatchBrush(int nIndex,COLORREF crColor);

相关文档
最新文档