posts - 0,  comments - 0,  trackbacks - 0
std::string 一些记录

Std::string  原文: http://www.cnblogs.com/SweetDream/archive/2007/08/09/848501.html

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来传递参数。

posted on 2009-07-06 16:53 豆芽小文 阅读(129) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理



<2026年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

文章档案(4)

搜索

  •  

最新评论