k)max_size()//返回字符的可能最大个数H
l)empty()//判断字符串是否为空H
m)capacity()//返回重新分配之前的字符容量H
n)reserve()//保留一定量内存以容纳一定数量的字符H
o)[],at()//存取单一字符H
p)>>,getline()//从 stream 读取某值H
q)<<//将谋值写入 stream
r)copy()//将某值赋值为一个 C_string
s)c_str()//将内容以 C_string 返回H
t)data()//将内容以字符数组形式返回H
u)substr()//返回某个子字符串H
v)查找函数H
w)begin()end()//提供类似 STL 的迭代器支持H
x)rbegin()rend()//逆向迭代器H
y)get_allocator()//返回配置器H
下面详细介绍:H
2.1C++字符串和 C 字符串的转换H
C++提供的由 C++字符串得到对应的 C_string 的方法是使用 data()、c_str()和
copy(),其中,data()以字符数组的形式返回字符串内容,但并不添加’\0’。c_str()返回
一个以‘\0’结尾的字符数组,而 copy()则把字符串的内容复制或写入既有的 c_string 或字
符数组内。C++字符串并不以’\0’结尾。我的建议是在程序中能使用 C++字符串就使用,
除非万不得已不选用 c_string。由于只是简单介绍,详细介绍掠过,谁想进一步了解使用
中的注意事项可以给我留言(到我的收件箱)。我详细解释。H
2.2大小和容量函数H
一个 C++字符串存在三种大小:a)现有的字符数,函数是 size()和 length(),他们等
效。Empty()用来检查字符串是否为空。b)max_size()这个大小是指当前 C++字符串最
多能包含的字符数,很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。
我们一般情况下不用关心他,应该大小足够我们用的。但是不够用的话,会抛出
length_error 异常 c)capacity()重新分配内存之前Hstring 所能包含的最大字符数。这里
另一个需要指出的是 reserve()函数,这个函数为 string 重新分配内存。重新分配的大小
由其参数决定,默认参数为 0,这时候会对 string 进行非强制性缩减。
还有必要再重复一下 C++字符串和 C 字符串转换的问题,许多人会遇到这样的问题,
自己做的程序要调用别人的函数、类什么的(比如数据库连接函数
Connect(char*,char*)),但别人的函数参数用的是 char*形式的,而我们知道,
c_str()、data()返回的字符数组由该字符串拥有,所以是一种 constchar*,要想作为上面
提及的函数的参数,还必须拷贝到一个 char*,而我们的原则是能不使用 C 字符串就不使用。
那么,这时候我们的处理方式是:如果此函数对参数(也就是 char*)的内容不修改的话,
我们可以这样 Connect((char*)UserID.c_str(),(char*)PassWD.c_str()),但是这时候是
存在危险的,因为这样转换后的字符串其实是可以修改的(有兴趣地可以自己试一试),
所以我强调除非函数调用的时候不对参数进行修改,否则必须拷贝到一个 char*上去。当
然,更稳妥的办法是无论什么情况都拷贝到一个 char*上去。同时我们也祈祷现在仍然使
用 C 字符串进行编程的高手们(说他们是高手一点儿也不为过,也许在我们还穿开裆裤的
时候他们就开始编程了,哈哈…)写的函数都比较规范,那样我们就不必进行强制转换了。
评论0
最新资源