std::string 一些记录

Std::string

C++标准库中的string class 使你可以将string 当作一个一般的型别而不会令用户感觉有任何问题。你可以像对待基本型别那样地复制、赋值、和比较string,再不必担心内存是否足够、占用内存实际长度等问题。

由于字符串字面常数(“Hello,World”)的型别并非string,因此在新的stringC-String之间必须存在一种强烈关系:在string的操作场合(比较,追加,插入等等动作)都应该可以使用C-string具体的说存在一个从const char*string的隐式型别转换。

有三个函数可以将字符串内容转换为字符数组和C-String

1.              data()  以字符数组的形式返回字符串内容。由于并未追加’\0’字符,所以返回型别并非有效的C-String.

2.              c_str()  C_String形式返回字符串内容,也就是在尾端添加’\0’字符。

3.              copy()  将字符串内容复制到“调用者提供的字符数组“中。不添加’\0’字符。

 

注意,data()c_str()返回的字符数组由该字符串拥有。也就是说调用者千万不可以修改它或释放其内存。请注意c_str()data()的返回值有效期限在下一次调用stringnon-const成员函数时即告终止。

std::string s;

foo(s.s_str());  

 

const char* p;

p = s.c_str();

foo(p);

s += ext;

foo(p)             // 此时p是无效的了

 

如果搜寻函数失败则返回string::npos

 

std::string s;

std::string::size_type idx// be careful:don't use any other type!

// ...

idx = s.find(substring)

if (idx == std::string::npos)

{

     //

}

使用stringnpos值及其型别时要格外小心: 若要检查返回值,一定要使用型别string::size_type,不能以intunsigned作为返回值型别;否则返回值与string::npos之间的比较可能无法正确执行。这时应为npos被设置为-1;

 

String采用了引用技术概念,通过reference counting,你甚至不必透过const reference来传递字符串;不过基于灵活性和可移植性的考虑,一般还是应该采用const reference来传递参数。

转载于:https://www.cnblogs.com/SweetDream/archive/2007/08/09/848501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值