VC CString::用法整理+ASSERT用法说明
来源:互联网 发布:淘宝网棉被单人多少钱 编辑:程序博客网 时间:2024/06/06 06:39
由于是转载,格式有些问题,故以代码方式给出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
1.CString::IsEmpty
BOOL
IsEmpty( )
const
;
返回值:如果CString 对象的长度为0,则返回非零值;否则返回0。
说明:此成员函数用来测试一个CString 对象是否是空的。
示例:
下面的例子说明了如何使用CString::IsEmpty。
// CString::IsEmpty 示例
CString s;
ASSERT( s.IsEmpty() );
请参阅 CString::GetLength
2.CString::Left
CString Left(
int
nCount )
const
;
throw
( CMemoryException );
返回值:返回的字符串是前nCount个字符。
示例:
CString s( _T(
"abcdef"
) );
ASSERT( s.Left(2) == _T(
"ab"
) );
3.CString::LoadString
BOOL
LoadString(
UINT
nID );
throw
( CMemoryException );
返回值:如果加载资源成功则返回非零值;否则返回0。
nID 一个Windows 字符串资源ID。
说明: 此成员函数用来读取一个由nID 标识的Windows 字符串资源,并放入一个已有CString 对象中。
示例:
下面的例子说明了如何使用CString::LoadString。
// CString::LoadString 示例
#define IDS_FILENOTFOUND 1
CString s;
if
(! s.LoadString( IDS_FILENOTFOUND ))
4.CString::MakeLower
void
MakeLower( );
//改变字符的小写
5.CString::MakeReverse
void
MakeReverse( );
//字符倒置
6.CString::MakeUpper
void
MakeUpper( );
//改变字符的大写
7.CString::Mid CString Mid(
int
nFirst )
const
; CString Mid(
int
nFirst,
int
nCount )
const
;nCount代表要提取的字符数, nFirst代表要提取的开始索引位置
示例: CString s( _T(
"abcdef"
) ); ASSERT( s.Mid( 2, 3 ) == _T(
"cde"
) );
8.CString::ReleaseBuffer
void
ReleaseBuffer(
int
nNewLength = -1 );
参数:nNewLength
此字符串的以字符数表示的新长度,不计算结尾的空字符。如果这个字
符串是以空字符结尾的,则参数的缺省值-1 将把CString 的大小设置为
字符串的当前长度。
说明:
使用ReleaseBuffer 来结束对由GetBuffer 分配的缓冲区的使用。如果你知道缓
冲区中的字符串是以空字符结尾的,则可以省略nNewLength 参数。如果字符
串不是以空字符结尾的,则可以使用nNewLength 指定字符串的长度。在调用
ReleaseBuffer 或其它CString 操作之后,由GetBuffer 返回的地址是无效的。
示例:
下面的例子说明了如何使用CString::ReleaseBuffer。
// CString::ReleaseBuffer 示例
CString s;
s =
"abc"
;
LPTSTR
p = s.GetBuffer( 1024 );
strcpy
(p,
"abc"
);
// 直接使用该缓冲区
ASSERT( s.GetLength() == 3 );
// 字符串长度 = 3
s.ReleaseBuffer();
// 释放多余的内存,现在p 无效。
ASSERT( s.GetLength() == 3 );
// 长度仍然是3
9.CString::Remove
int
CString::Remove (
TCHAR
ch );
返回值:返回从字符串中移走的字符数。如果字符串没有改变则返回零。
参数:ch 要从一个字符串中移走的字符。
说明:此成员函数用来将ch 实例从字符串中移走。与这个字符的比较是区分大小写
的。
示例:
// 从一个句子中移走小写字母'c':
CString str (“This is a test.”);
int
n = str.Remove(
't'
);
ASSERT( n == 2 );
ASSERT( str ==“This is a es. ” );
10.CString::Replace
int
Replace(
TCHAR
chOld,
TCHAR
chNew );
int
Replace(
LPCTSTR
lpszOld,
LPCTSTR
lpszNew );
返回值:返回被替换的字符数。如果这个字符串没有改变则返回零。
参数:chOld 要被chNew 替换的字符。
chNew 要用来替换chOld 的字符。
lpszOld 一个指向字符串的指针,该字符串包含了要被lpszNew 替换的字符。
LpszNew 一个指向字符串的指针,该字符串包含了要用来替换lpszOld 的字符。
说明:此成员函数用一个字符替换另一个字符。函数的第一个原形在字符串中用chNew
现场替换chOld。函数的第二个原形用lpszNew 指定的字符串替换lpszOld 指定
的子串。
在替换之后,该字符串有可能增长或缩短;那是因为lpszNew 和lpszOld 的长度
不需要是相等的。两种版本形式都进行区分大小写的匹配。
示例:
// 第一个例子,old 和new 具有相同的长度。
CString strZap( “C - -” );
int
n = strZap.Replace(
'-'
,
'+'
);
ASSERT( n == 2 );
ASSERT(strZap == “C++” );
// 第二个例子,old 和new 具有不同的长度。
CString strBang( “Everybody likes ice hockey” );
n = strBang.Replace( “hockey”, “golf” );
ASSERT( n ==1 );
n = strBang.Replace ( “likes” , “plays” );
ASSERT( n == 1 );
n = strBang.Replace( “ice”, NULL );
ASSERT( n == 1 );
ASSERT( strBang == “Everybody plays golg” );
// 注意,现在在你的句子中有了一个额外的空格。
// 要移走这个额外的空格,可以将它包括在要被替换的字符串中,例如,“ice ”。
11.CString::ReverseFind
int
ReverseFind(
TCHAR
ch )
const
;
返回值: 返回此CString 对象中与要求的字符匹配的最后一个字符的索引;如果没有找
到需要的字符则返回-1。
参数: ch 要搜索的字符。
说明:此成员函数在此CString 对象中搜索与一个子串匹配的最后一个字符。此函数
类似于运行时函数
strrchr
。
示例:
// CString::ReverseFind 示例
CString s(
"abcabc"
);
ASSERT( s.ReverseFind(
'b'
) == 4 );
12.CString::Right
CString Right(
int
nCount )
const
;
throw
( CMemoryException );
返回值: 返回的字符串是最后nCount个字符。
CString s( _T(
"abcdef"
) );
ASSERT( s.Right(2) == _T(
"ef"
) );
13.CString:: SetAt
void
SetAt(
int
nIndex,
TCHAR
ch );
说明:可以把字符串理解为一个数组,SetAt类似于[].注意nIndex的范围,如果不合适会有调试错误。 Ch 更替字符, 把nIndex位置上的字符 变成ch
示例:
CString s(
"abc"
);
s.MakeReverse();
ASSERT( s ==
"cba"
);
14.CString::TrimLeft
void
TrimLeft( );
void
CString::TrimLeft(
TCHAR
chTarget );
说明:如果没有参数,从左删除字符(\n\t空格等),至到遇到一个非此类字符. 当然你也可以指定删除那些字符. 如果指定的参数是字符串,那么遇上其中的一个字符就删除. \n 换行符 \t TAB字符
示例1: CString str =
"\n\t a"
;
str.TrimLeft();
str为“a”;
示例2:
CString str =
"abbcadbabcadb "
;
str.TrimLeft(
"ab"
);
结果
"cadbabcadb "
str.TrimLeft(
"ac"
);
结果
"bcadbabcadb "
15.CString::TrimRight
void
TrimRight( );
void
CString::TrimRight(
TCHAR
chTarget );
void
CString::TrimRight(
LPCTSTR
lpszTargets );
说明:用法类似于上面。
16.CString::Compare
int
Compare(
LPCTSTR
lpsz )
const
;
返回值:字符串一样返回0,小于lpsz 返回-1,大于lpsz 返回1, 区分大小字符
示例:
CString s1(
"abc"
);
CString s2(
"abd"
);
ASSERT( s1.Compare( s2 ) == -1 );
ASSERT( s1.Compare(
"abe"
) == -1
17.CString::CompareNoCase
int
CompareNoCase(
LPCTSTR
lpsz )
const
;
返回值: 字符串一样 返回0,小于lpsz 返回-1,大于lpsz 返回1,不区分大小字符
18.CString::Collate
int
Collate(
LPCTSTR
lpsz )
const
;
同CString::Compare
19.CString::CollateNoCase
int
CollateNocase(
LPCTSTR
lpsz )
const
;
同CString::CompareNoCase
20.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"
CString s6(
'x'
, 6 );
// s6 = "xxxxxx"
CString s7((
LPCSTR
)ID_FILE_NEW);
// s7 = "Create a new document"
CString city =
"Philadelphia"
;
21.CString::Delete
int
Delete(
int
nIndex,
int
nCount = 1);
返回值:是被删除前的字符串的长度
nIndex是第一个被删除的字符,nCount是一次删除几个字符。根据我实验得出的结果:当nCount>要删除字符串的最大长度(GetCount() - nIndex)时会出错,当nCount过大,没有足够的字符删除时,此函数不执行。
示例:
CString str1,str2,str3;
char
a;
str1 =
"nihao"
;
str2 =
"nIhao"
;
int
x;
// int i=(str1 == str2);
str1.Delete(2,3);
如果nCount(3) > GetCount() – nIndex (5-2)就会执行错误
22.CString::Empty
Void Empty( );
返回值:没有返回值 清空操作;
示例:
CString s(
"abc"
);
s.Empty();
ASSERT( s.GetLength( ) == 0 );
23.CString::Find
int
Find(
TCHAR
ch )
const
;
int
Find(
LPCTSTR
lpszSub )
const
;
int
Find(
TCHAR
ch,
int
nStart )
const
;
int
Find(
LPCTSTR
lpszSub,
int
nStart )
const
;
返回值: 不匹配的话返回 -1; 索引以0 开始; nStar 代表以索引值nStart 的字符开始搜索 ,
即为包含以索引nStart字符后的字符串.
示例:
CString s(
"abcdef"
);
ASSERT( s.Find(
'c'
) == 2 );
ASSERT( s.Find(
"de"
) == 3 );
Cstring str(“The stars are aligned”);
Ing n = str.Find(
'e'
,5);
ASSERT(n == 12)
24.CString::FindOneOf
int
FindOneOf(
LPCTSTR
lpszCharSet )
const
;
返回值: 不匹配的话返回 -1; 索引以0 开始
注意::返回此字符串中第一个在lpszCharSet中也包括字符并且从零开始的索引值
示例:
CString s(
"abcdef"
);
ASSERT( s.FindOneOf(
"xd"
) == 3 );
// 'd' is first match.
25.CString::Format
void
Format(
LPCTSTR
lpszFormat, ... );
void
Format(
UINT
nFormatID, ... );
参数:lpszFormat 一个格式控制字符串
nFormatID 字符串标识符
示例:
CString str;
Str.Format(“%d”,13);
此时Str为13
26.CString::GetAt
TCHAR
GetAt(
int
nIndex )
const
;
返回值:返回标号为nIndex的字符,你可以把字符串理解为一个数组,GetAt类似于[].注意nIndex的范围,如果不合适会有调试错误。
27.CString::GetBuffer
LPTSTR
GetBuffer(
int
nMinBufLength );
返回值:一个指向对象的(以空字符结尾的)字符缓冲区的
LPTSTR
指针。
参数:nMinBufLength
字符缓冲区的以字符数表示的最小容量。这个值不包括一个结尾的空字符的空间。
说明:此成员函数返回一个指向CString 对象的内部字符缓冲区的指针。返回的
LPTSTR
不是
const
,因此可以允许直接修改CString 的内容。如果你使用由GetBuffer 返回的指针来改变字符串的内容,你必须在使用其它的CString 成员函数之前调用ReleaseBuffer 函数。
在调用ReleaseBuffer 之后,由GetBuffer 返回的地址也许就无效了,因为其它的CString 操作可能会导致CString 缓冲区被重新分配。如果你没有改变此CString 的长度,则缓冲区不会被重新分配。当此CString 对象被销毁时,其缓冲区内存将被自动释放。
注意:如果你自己知道字符串的长度,则你不应该添加结尾的空字符。但是,当你用ReleaseBuffer 来释放该缓冲区时,你必须指定最后的字符串长度。如果你添加了结尾的空字符,你应该给ReleaseBuffer 的长度参数传递-1 ,ReleaseBuffer 将对该缓冲区执行
strlen
来确定它的长度。
示例:
// CString::GetBuffer 例子
CString s(
"abcd"
);
#ifdef _DEBUG
afxDump <<
"CString s "
<< s <<
"\n"
;
#endif
LPTSTR
p = s.GetBuffer( 10 );
strcpy
( p,
"Hello"
);
// 直接访问CString 对象。
s.ReleaseBuffer( );
#ifdef _DEBUG
afxDump <<
"CString s "
<< s <<
"\n"
;
#endif
28.CString::GetLength
int
GetLength( )
const
;
返回值:返回字符串中的字节计数。
说明:此成员函数用来获取这个CString 对象中的字节计数。这个计数不包括结尾的空字符。
对于多字节字符集(MBCS),GetLength 按每一个8 位字符计数;即,在一个多字节字符中的开始和结尾字节被算作两个字节。
示例
下面的例子说明了如何使用CString::GetLength。
// CString::GetLength 示例
CString s(
"abcdef"
);
ASSERT( s.GetLength() == 6 );
29.CString::Insert
int
Insert(
int
nIndex,
TCHAR
ch );
int
Insert(
int
nIndex,
LPCTSTR
pstr );
返回值:返回修改后的长度,nIndex是字符(或字符串)插入后的索引号例子
示例:
CString str( “HockeyBest”);
int
n = str.Insert( 6, “is” );
ASSERT( n == str.GetLength( ) );
printf
( “1: %s\n”, (
LPCTSTR
) str );
n = str.Insert( 6,
' '
);
ASSERT( n == str.GetLength( ) );
printf
( “2: %s\n”, (
LPCTSTR
) STR );
n = str.Insert(555, ‘1’);
ASSERT( n == str.GetLength ( ) );
printf
( “3: %s\n”, (
LPCTSTR
) str );
输出
1. Hockeyis Best
2. Hockey is Best
3. Hockey is Best!
assert()函数用法总结
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int
main(
void
)
{
FILE
*fp;
fp =
fopen
(
"test.txt"
,
"w"
);
//以可写的方式打开一个文件,如果不存在就创建一个同名文件
assert
( fp );
//所以这里不会出错
fclose
( fp );
fp =
fopen
(
"noexitfile.txt"
,
"r"
);
//以只读的方式打开一个文件,如果不存在就打开文件失败
assert
( fp );
//所以这里出错
fclose
( fp );
//程序永远都执行不到这里来
return
0;
}
已放弃使用assert()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:
#include <stdio.h>#define NDEBUG#include <assert.h>- VC CString::用法整理+ASSERT用法说明
- VC:CString用法整理
- VC:CString用法整理
- VC:CString用法整理
- VC:CString用法整理
- VC:CString用法整理
- VC:CString用法整理
- VC:CString用法整理
- VC:CString用法整理(转载)
- VC:CString用法整理(转载)
- VC:CString用法整理(转载)
- VC:CString用法整理(转载)
- VC:CString用法整理(转载)
- VC:CString 用法整理(转载)
- VC:CString用法整理(转载)
- VC:CString用法整理(转载)
- VC:CString用法整理(转载)
- 【转】 VC CString用法整理
- C++ 中int,char,string,CString类型转换
- 《Velocity 模板使用指南》中文版
- qt 5.0.2 vs addin 安装错误 Unable to find a Qt build!
- MFC在对话框添加右键菜单
- Unicode和UTF-8之间的关系
- VC CString::用法整理+ASSERT用法说明
- vc选取及保存文件对话框\浏览文件夹对话框
- Dialog使用2
- n!阶乘后面有多少个零
- system1之:文件和目录管理
- 分割字符串:strtok()函数
- 【Android 应用开发】对Android体系结构的理解--后续会补充
- RF Algorithm(随机森林算法)与欧氏距离
- MAX Reactor 之角度阻尼器(Angular Dashpot)