2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【C++】STL容器之string使用(赋值 拼接 查找 替换 比较 截取 插入 删除 子串)

【C++】STL容器之string使用(赋值 拼接 查找 替换 比较 截取 插入 删除 子串)

时间:2019-12-16 19:29:29

相关推荐

【C++】STL容器之string使用(赋值 拼接 查找 替换 比较 截取 插入 删除 子串)

文章目录

基本概念string构造函数string赋值操作string字符串拼接(+=,append)查找和替换(find,replace)string字符串比较(compare)string字符存取([],at)string插入和删除(insert,erase)获取string子串(substr)

基本概念

本质:

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

string和char * 区别:

char * 是一个指针

string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。

特点:

string 类内部封装了很多成员方法

例如:查找find,拷贝copy,删除delete 替换replace,插入insert

string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

string构造函数

构造函数原型:

string();创建一个空的字符串 例如: string str

string(const char* s);使用字符串s初始化

string(const string& str);使用一个string对象初始化另一个string对象

string(int n, char c);使用n个字符c初始化

示例

#include <string>//string构造void test01(){string s1; //创建空字符串,调用无参构造函数cout << "str1 = " << s1 << endl;//因为要输出string函数,所以要用头文件#include<string>const char* str = "hello world";string s2(str); //把c_string转换成了stringcout << "str2 = " << s2 << endl;string s3(s2); //调用拷贝构造函数cout << "str3 = " << s3 << endl;string s4(10, 'a');//10个acout << "str3 = " << s3 << endl;}int main() {test01();return 0;}

string赋值操作

string str1;str1 = "hello world"; //char*类型字符串 赋值给当前的字符串cout << "str1 = " << str1 << endl;//str1 = hello worldstring str2;str2 = str1;//把字符串s赋给当前的字符串cout << "str2 = " << str2 << endl;//str2 = hello worldstring str3;str3 = 'a';//字符赋值给当前的字符串cout << "str3 = " << str3 << endl;//str3 = astring str4;str4.assign("hello c++");//把字符串s赋给当前的字符串cout << "str4 = " << str4 << endl;//str4 = hello c++string str5;str5.assign("hello c++",5); //把字符串s的前n个字符赋给当前的字符串cout << "str5 = " << str5 << endl;str5 = hellostring str6;str6.assign(str5); //把字符串s赋给当前字符串cout << "str6 = " << str6 << endl;//str6 = hellostring str7;str7.assign(5, 'x');//用n个字符c赋给当前字符串cout << "str7 = " << str7 << endl;//str7 = xxxxx

string字符串拼接(+=,append)

//第一种string str1 = "字符串";str1 += "拼接";//第二种string str2 = "I";str2.append(" love ");//把字符串s连接到当前字符串结尾str2.append("game abcde", 4);//把字符串s的前n个字符连接到当前字符串结尾//str2.append(str2);str2.append(str2, 4, 3);//字符串s中从pos开始的n个字符连接到字符串结尾// 从下标4位置开始 ,截取3个字符,拼接到字符串末尾

查找和替换(find,replace)

find查找是从左往后,rfind从右往左

find找到字符串后返回查找的第一个字符位置,找不到返回-1

replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串

函数原型:

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最后一次出现位置string& replace(int pos, int n, const string& str);//替换从pos开始n个字符为字符串strstring& replace(int pos, int n,const char* s);//替换从pos开始的n个字符为字符串s

示例

//查找和替换void test01(){//查找string str1 = "abcdefgde";int pos = str1.find("de");if (pos == -1){cout << "未找到" << endl;}else{cout << "pos = " << pos << endl;}pos = str1.rfind("de");cout << "pos = " << pos << endl;}void test02(){//替换string str1 = "abcdefgde";str1.replace(1, 3, "1111");cout << "str1 = " << str1 << endl;}int main() {test01();test02();return 0;}

string字符串比较(compare)

比较方式:

字符串比较是按字符的ASCII码进行对比

= 返回 0

> 返回 1

< 返回 -1

用compare

string s1 = "hello";string s2 = "aello";//s1 大于 s2int result = pare(s2);

string字符存取([],at)

string字符串中单个字符存取有两种方式,利用 [ ] 或 at

函数原型:

char& operator[](int n); //通过[]方式取字符char& at(int n); //通过at方法获取字符

string插入和删除(insert,erase)

插入和删除的起始下标都是从0开始

函数原型:

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

获取string子串(substr)

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。