c++标准库string的使用完美总结——十分详细,复习学习记忆都可以使用

[复制链接]
发表于 2023-2-16 01:03:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
std::string详解

之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。
标准模板库(STL)提供了一个std::string类,其是std::basic_string的一个特化,它是一个容器类,可把字符串当作普通类型来使用,并支持比较、连接、遍历、STL算法、复制、赋值等等操作,这个类定义在头文件中。#include  //注意这里不是string.h string.h是C字符串头文件
实现原理
1.声明一个C++字符串,初始化

std::string类的构造函数声明一个字符串变量很简单:string Str;
这样我们就声明了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下:

  • string s(); //生成一个空字符串s
  • string s(str) //拷贝构造函数 生成str的复制品string(const string& str)
  • string s(const char *s) //将C字符串作为s的初值
  • string s(const char* cstr, size_type n) //使用字符串str的前n个字符初始化作为字符串s的初值。
  • string s(str,stridx) //将字符串str内"始于位置stridx"的部分当作字符串的初值
  • string s(const string& str, size_type pos,strlen) //将字符串str内"始于pos且长度顶多strlen"的部分作为字符串的初值
  • string s(int num,char c) //生成一个字符串,包含num个c字符
  • string s(begin,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值,即迭代器间的值。


  • s.~string() //销毁所有字符,释放内存
  • 注意:当构造的string太长而无法表达时会抛出length_error异常
  • 当指定拷贝的长度大于被拷贝字符串的长度时,是将字符串对应位置中剩余的内容全部拷贝。
2.字符串操作函数

1.赋以新值 = ,assign( )

第一个赋值方法当然是使用操作符=,新值可以是string(如:s=ns) 、c_string(如:s="gaint")甚至单一字符(如:s=’j’)。
还可以使用成员函数assign(),这个成员函数可以使你更灵活的对字符串赋值。注意和string的构造初始化赋值等函数基本类似,只是这个是赋予新值。
  1. s.assign(str);
  2. s.assign(str,1,3);//如果str是"iamangel" 就是把"ama"赋给字符串
  3. s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
  4. s.assign("gaint");
  5. s.assign("nico",3);//把’n’ ‘I’ ‘c’赋给字符串
  6. s.assign("nicoafdad",2,5);//从二开始数五个
  7. s.assign(5,’x’);//把五个x赋给字符串
复制代码
2.两个字符串关系:交换swap( ) 比较字符串 ==,!=,< ,  , >= ,  ,compare( )


a.swap(b); //结果为 b="12345678"; a="ABCD";swap会导致迭代器失效
C ++字符串支持常见的比较操作符(>,>=,
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表