CString类常用方法

来源:互联网 发布:中国网络环境的变化 编辑:程序博客网 时间:2024/06/12 23:55

CString类常用方法---Replace(),Remove(),Delete(),Find(),ReverseFind(),Insert()

CString类常用方法---MakeUpper(),MakeLower(),MakeReverse()

void MakeUpper( );      //使所有小写字母变为大写

void MakeLower( );      //使所有大写字母变为小写

void MakeReverse( );   //倒序字符串

例:

 CString a,b,c;
 
 a = "ABcd";

 a.MakeUpper();    //结果为"ABCD"


 a.MakeLower();    //结果为"abcd"


 a.MakeReverse(); //结果为"dcba"

CString类常用方法---CollateNoCase(),strcmp().字符串比较

int CollateNoCase( LPCTSTR lpsz ) const;

注:

    函数在比较时不区分大小写

    参数:   为要和对象比较的字符串,也可以为CString对象

    返回值:如果两个字符串一样则返回0;

int strcmp( const char *string1const char *string2 );

注:

    函数在比较时区分大小写

    参数:   为要和对象比较的字符串

    返回值:string1=string2返回0

               string1>string2返回>0

               string1<string2返回<0

例1:


 CString a,b,;
 
 a = "d";
 b = "E";
 
 a.CollateNoCase(b);// 返回为-1,因为不区分大小写

 

 注:
 a=b 时返回0; 
 a>b 时返回1;
 a<b 时返回-1;

      

例2:

char *pa = new char[10];
char *pb = new char[10];

 

strcpy(pa, "d");
strcpy(pb, "E");

 

strcmp(pa, pb);// 返回为1,因为区分大小写  

注:
 pa=pb 时返回0; 
 pa>pb 时返回1;
 pa<pb 时返回-1;    

例3:


 CString a,b,;
 
 a = "d";
 b = "E";

 

 if (a>b)
 {
 ...
 }
  if (a<b)
 {
 ...
 }

 if (a==b)
 {
 ...
 }
  
 注:当区分大小写时,CString是可以直接用比较运算符比较的,因为这个类已经运算符重载了!

CString类常用方法---GetLength(),strlen(),IsEmpty(),Empty()

int GetLength( ) const;   //得到字符串的字节数(并不都是个数,如汉字一个字占两个字节)

int strlen( const char *string ); //计算参数字符串里面字节的个数并返回

BOOL IsEmpty( ) const; //如果字符串含有字符就返回假,如果是个空字符串就返回真

void Empty( );                 //清空字符串,相当于把字符串的值赋为""

注:

     在函数后面加 const 的意思是:

     如果一个类声明了一个常量对象,这个对象只能使用后边带 const 这个的方法.

例1:

 CString a,b,c,d;
 a = "123456789";
 b = "中国人";
 c = "中国人12345";

 

 a.GetLength(); //得到9个
 b.GetLength(); //得到6个
 c.GetLength(); //得到11个

例2:

 CString a;
 a = "123456789";

 

 if (TRUE == a.IsEmpty()) //如果a为空则把 "null_1" 打印在对话框中
 {
  MessageBox("null_1");
 }

 

 a.Empty();                       //把a中的字符串清空

 

 if (TRUE == a.IsEmpty()) //如果a为空则把 "null_2" 打印在对话框中
 {
  MessageBox("null_2");
 }

 

结果在对话框中打印的是 "null_2"

CString类常用方法----TrimLeft(),TrimRight()

void TrimLeft( );     //把字符串左边的空格去掉

void TrimRight( );   //把字符串右边的空格去掉

例: 

CString a,b;
 b = a = "   123456789  ";


 a.TrimLeft();     //得到的字符串为"123456789  "
 b.TrimRight();    //得到的字符串为"   123456789"

CString类常用方法----Left(),Mid(),Right()

CString Left( int nCount ) const;                   //从左边1开始获取前 nCount 个字符

CString Mid( int nFirst ) const;                      //从左边第 nCount+1 个字符开始,获取后面所有的字符

CString Mid( int nFirst, int nCount ) const;    //从左边第 nFirst+1 个字符开始,获取后面  nCount 个字符

CString Right( int nCount ) const;                  //从右边1开始获取从右向左前 nCount 个字符

注:

     在函数后面加 const 的意思是:

     如果一个类声明了一个常量对象,这个对象只能使用后边带 const 这个的方法.

例:

 CString a,b;
 a = "123456789";


 b = a.Left(4);   //值为:1234
 b = a.Mid(3);    //值为:456789
 b = a.Mid(2, 4); //值为:3456
 b = a.Right(4);  //值为:6789

CString类常用方法----Format(),sprintf(),itoa(),ltoa(),ultoa(),atoi(),atol(),atof()

void Format( LPCTSTR lpszFormat, ... );和printf的使方法一样

void Format( UINT nFormatID, ... );利用资源格式化字符串,这个比上面的省空间,方便改,功能一样

作用:像printf一样格式化字符串

 

int sprintf( char *buffer, const char *format [, argument] ... );//用法和 printf 一样

 

char *itoa( int value, char *string, int radix );

注:

   参数:int value :是要转为字符串的int型

          char *string :存放字符串的缓冲区

          int radix  :将int转换为多少进制的数存放在缓冲区中 

 

char *ltoa( long value, char *string, int radix );

注:

   参数:long value :是要转为字符串的long型

          char *string :存放字符串的缓冲区

          int radix  :将long转换为多少进制的数存放在缓冲区中 

 

char *ultoa( unsigned long value, char *string, int radix );

注:

   参数:unsigned long value :是要转为字符串的unsigned long型

          char *string :存放字符串的缓冲区

          int radix  :将unsigned long转换为多少进制的数存放在缓冲区中 

 

int atoi( const char *string );

注:

   参数:const char *string :是要转为int型的字符串

   返回值:字符串对应的int型

long atol( const char *string );

注:

   参数:const char *string :是要转为long型的字符串

   返回值:字符串对应的long型

double atof( const char *string );

注:

   参数:const char *string :是要转为double型的字符串

   返回值:字符串对应的double型

例:

1.void Format( LPCTSTR lpszFormat, ... );

 

CString a,b;
a = "12卡拉";

b.Format("%s", a);                       // b的值为"12卡拉";,因为是把a格式化到b中,相当于a=b
b.Format("%d", a.GetLength());   // b的值为6,因为是把a的字节长格式化到b中

 


2.void Format( UINT nFormatID, ... );

(1)先打开"ResourceView"视窗

(2)点开"String Table"

(3)双击"String Table [English [U.S.]]"

(4)右键右边的下边空白,点"New String"

(5)在"Caption"右边的框中添:%d(这里也可以改成%s,%c等,根据须要来决定)

(6)把上面的"ID"记住

 

CString a,b;
a = "12卡拉";
b.Format(添上面的ID号, a.GetLength());   // b的值为6,因为是把a的字节长格式化到b中

 

例2:

 

char *p = new char[255];
 int a = 10;
 double b = 3.14;
 long c = 20;
 unsigned d = 30;
 char *e = "abcde";
 CString f;

 sprintf(p, "%d", a);   //p中的值为10
 sprintf(p, "%lf", b);  //p中的值为3.140000
 sprintf(p, "%ld", c);  //p中的值为20
 sprintf(p, "%u", d);   //p中的值为30
 sprintf(p, "%s", e);   //p中的值为abcde

 f.Format("%d", a);   //f中的值为10
 f.Format("%lf", b);  //f中的值为3.140000
 f.Format("%ld", c);  //f中的值为20
 f.Format("%u", d);   //f中的值为30
 f.Format("%s", e);   //f中的值为abcde

 itoa(a, p, 10);      //p中的值为10
 ltoa(c, p, 10);      //p中的值为20
 ultoa(d, p, 10);     //p中的值为30

 char *g = "40";
 char *h = "4.59";
 int i = atoi(g);     //i中的值为40
 long j = atol(g);    //j中的值为40
 double k = atof(h);  //k中的值为4.58999999...

宽字符与多字符集(LPTSTR、LPCSTR、LPCTSTR、LPSTR)

UNICODE:它是用两个字节表示一个字符的方法。

比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是两个字符,高字符用0填充;而汉字'程'在ASCII下面是两个字节,在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字.

 

MBCS:是多字节字符集,它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样(这也是我们容易把MBCS和ASCII搞混的原因),但表示其他文字时就需要用多字节。

 

WINDOWS下面的程序设计可以支持MBCS和UNICODE两种编码的字符串,具体用那种就看你定义了MBCS宏还是
UNICODE宏。

MBCS宏对应的字符串指针是char*也就是LPSTR,UNICODE对应的指针是unsigned short*也就是LPWSTR,为了写程序方便微软定义了类型LPTSTR.

在MBCS下他就是char*,在UNICODE下它是unsigned char*,这样你就可以重定义一个宏进行不同字符集的转换了。

 

LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义:

LPSTR: 32-bit指针 指向一个字符串,每个字符占1字节

LPCSTR: 32-bit指针 指向一个常字符串(常量字符串),每个字符占1字节
LPCTSTR:32-bit指针 指向一个常字符串(常量字符串),每字符可能占1字节或2字节,取决于Unicode是否定义
LPTSTR: 32-bit指针 指向一个字符串,每字符可能占1字节或2字节,取决于Unicode是否定义

 

LPSTR:   字符串(char*)的长指针   
LPCSTR:   同LPSTR,只是其指针是const的,也就是其内容是不可以被修改的。  
LPTSTR:  同LPSTR,不过是TCHAR*的长指针,而TCHAR是一个宏,系统根据环境的定义来确定是char*还是word*  
LPCTSTR: 同LPTSTR,是const的。

 

Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。

WindowsNT的所有与字符有关的函数都提供两种方式的版本,而Windows9x只支持ANSI方式。

_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存.

 

Windows核心编程的第一章。

 

L是表示字符串资源为Unicode的。比如:
wchar_t Str[] = L"Hello World!";
这个就是双子节存储字符了。

 

_T是一个适配的宏~   

当#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。

 

比如:

LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T("Hello");
以上两句使得无论是在UNICODE编译条件下都是正确编译的。

 

而且MS推荐你使用相匹配的字符串函数。
比如处理LPTSTR或者LPCTSTR 的时候,不要用strlen ,而是要用_tcslen否则在UNICODE的编译条件下,strlen不能处理 wchar_t*的字符串。

T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集,编译的时候才决定!


转自:http://blog.csdn.net/qingqinglanghua/article/category/630817

原创粉丝点击