引言

string容器
string是C++风格的字符串,而string本质上是一个类

C++ STL中的string区别于C语言风格的cstring, 对于这一点有疑惑的小伙伴推荐先看一下这篇文章:
C++笔记(cstring和string的区别)

2.2.1 string的特性

  1. Char为指针,String是一个类。string封装了char,管理这个字符串,是一个char*型的容器。

  2. 不用考虑内存释放和越界

  3. String封装了很多实用的成员方法
    查找,拷贝,删除…

2.2.2 string用法理论

2.2.2.1 string构造函数

string(); //创造一个空的字符串
string(const char*s) //使用字符串s初始化
string(const string& str); //使用一个string对象初始化另一个string对象
string(int n, char c); //使用n个字符c初始化

2.2.2.2 string赋值操作

赋值的函数原型:

string& operator=(const char* s); //char*类型字符串赋值给当前的字符串
string& operator=(const string &s); //把字符串s赋给当前字符串
string& operator=(char c); //字符赋值给当前的字符串
string& assign(const char *s); //把字符串s赋给当前字符串
string& assign(const char *s, int n); //把字符串s的前n个字符赋给当前字符串
string& assign(const string &s); //把字符串s赋给当前字符串
string& assign(int n, char c); //用n个字符c赋给当前字符串

2.2.2.3 string取值操作

这里参考下面代码区text03函数

string s = "abcdefg";
//重载[]操作符
for (int i = 0;i < s.size(); i++)
{
cout << s[i] << " ";
}
cout << endl;
//at成员函数
for (int i = 0; i < s.size(); i++)
{
cout << s.at(i) << " ";
}
cout << endl;

2.2.2.4 string拼接操作

string& operator+=(const char* str); //重载+=操作符
string& operator+=(const char c); //重载+=操作符
string& operator+=(const string& str); //重载+=操作符
string& append(const char *s); //把字符串s连接到当前字符串结尾
string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s); //同operator+=(const string& str)
string& append(const string &s, int pos, int n); //字符串s中从pos开始的n个字符连接到字符串结尾

2.2.2.6 string查找

//string查找
int find(const string& str, int pos=0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos=0) const; //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos=0) const; //查找字符c第一次出现位置
int rfind(const string& str, int pos=npos) const; //查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos=npos) const; //查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置
int rfind(const char* c, int pos=0) const; //查找字符c最后一次出现位置

2.2.2.7 string替换

//string替换
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s

2.2.2.7 string字符串比较

字符串比较是按字符的ASCII码进行对比或者说是按照字典序,字母越靠前越小。
注意:大写A比小写a小

(等于) = 返回 0

(大于) > 返回 1

(小于) < 返回 -1

int compare(const string &s) const; // 与字符串s比较
int compare(const char *s) const; //与字符串s比较

2.2.2.8 string字符串插入和删除

string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c); //在指定位置插入n个字符c
string& erase(int pos, int n=npos); //删除从pos开始的n个字符

2.2.2.9 string子串

string substr(int pos=0, int n=npos) const; //返回由pos开始的n个字符组成的字符串

string用法示例代码

//函数text0~9对应2.2.2.1~2.2.2.9
#include<iostream>
#include<string>
using namespace std; //初始化
void text01()
{
cout << "\ntext01\n";
string s1;//调用无参构造
string s2(10, 'a');
string s3("abcdefg");
string s4(s3);//拷贝构造 cout << s1 << endl;
cout << s2 << endl;
cout << s3 << endl;
cout << s4 << endl;
} //赋值操作
void text02()
{
cout << "\ntext02\n";
string s1;
string s2("appp");
s1 = "abcdef";
cout << s1 << endl;
s1 = s2;
cout << s1 << endl; //成员方法
s1.assign("jkl");
cout << s1 << endl;
} //取值操作
void text03()
{
cout << "\ntext03\n";
string s1 = "abcdefg"; //重载[]操作符
for (int i = 0;i < s1.size(); i++)
{
cout << s1[i] << " ";
}
cout << endl; //at成员函数
for (int i = 0; i < s1.size(); i++)
{
cout << s1.at(i) << " ";
}
cout << endl; //区别:[]方式 如果访问越界,直接挂了
//at方式 访问越界 抛异常out_of_range
try
{
/*cout << s1[100] << endl;*/
cout << s1.at(100) << endl;
}
catch (...)
{
cout << "越界" << endl;
}
} //拼接操作
void text04()
{
cout << "\ntext04\n";
//1
string s = "abcd";
s += "abcd";
string s2 = "1111";
s += s2;
cout << s << endl; //2
string s3 = "2222";
s2.append(s3);
cout << s2 << endl;
string s4 = s2 + s3;
cout << s4 << endl;;
} //查找操作
void text05()
{
cout << "\ntext05\n";
string s = "abcdefghjkl";
//查找第一次出现的位置
int pos = s.find("fg");
cout << "pos:" << pos << endl;//返回5 //查找最后一次出现的位置
pos = s.rfind("fg");
cout << "pos:" << pos << endl;
} //替换操作
void text06()
{
cout << "\ntext06\n";
string s = "abcdefg";
s.replace(1,3,"111");
cout << s << endl;
} //字符串比较
void text07()
{
cout << "\ntext07\n";
string s1 = "abcd", s2 = "abce";
if (s1.compare(s2) == 0)
{
cout << "相等" << endl;
}
else
{
cout << "不相等 值为:" << s1.compare(s2) << endl;
//ASCII码字典序,小于为-1。
}
} //string子串
void text08()
{
cout << "\ntext08\n";
string s = "abcdefg";
string mysubstr = s.substr(1, 3);
cout << mysubstr << endl;
} //string插入和删除操作
void text09()
{
cout << "\ntext09\n";
string s = "abcdefg";
s.insert(3, "111");
cout << s << endl; s.erase(0, 2);//从0位置开始删2个元素
cout << s << endl;
} int main()
{
text01();
text02();
text03();
text04();
text05();
text06();
text07();
text08();
text09();
return 0;
}

string用法示例代码结果


谢谢阅读(〃’ ▽ '〃)如有纰漏欢迎指出,觉得还不错就点个赞吧。

最新文章

  1. ov5640摄像头设备驱动
  2. ubuntu 上安装字体
  3. luagd介绍
  4. MYSQL 日期函数【转】
  5. PLSQL_闪回操作3_Fashback Transaction Query
  6. Java(Android)编程思想笔记01:多态性的理解
  7. [C#]判断字符串中是否包含中文
  8. 直接在存储过程里面写sql语句的话 ,会返回操作的结果
  9. C#获取时间属于第几周
  10. SQL Server 视图
  11. UESTC_酱神寻宝 2015 UESTC Training for Dynamic Programming&lt;Problem O&gt;
  12. .NET中DLL“没有可放置在工具箱的组件”—FreeTextBox
  13. cd 命令详解
  14. CSS基础:块级元素与盒模型
  15. 软件工程(FZU2015) 助教总结
  16. 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
  17. 保持APP后台NSTimer运行
  18. 【Linux】文件夹及作用说明
  19. 剑指offer三十三之丑数
  20. jQuery checkbox选中问题之prop与attr注意点分析

热门文章

  1. 一致性协议之ZAB
  2. C语言中的typedef跟define的区别
  3. K8s二进制部署单节点 master组件 node组件 ——头悬梁
  4. 生成树协议(STP)的精髓知识
  5. MXNet源码分析 | Gluon接口分布式训练流程
  6. .netrar最不安全几个问题总结
  7. 详细介绍rar是什么由谁发明
  8. 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__的原理介绍
  9. html-拖拽释放(Drag and drop) API
  10. IDEA2019.2.2激活码,亲测可用