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"
int CollateNoCase( LPCTSTR lpsz ) const;
注:
函数在比较时不区分大小写
参数: 为要和对象比较的字符串,也可以为CString对象
返回值:如果两个字符串一样则返回0;
int strcmp( const char *string1, const 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( 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...
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