string容器

1.1 string容器的基本概念

string容器是一个类 这个容器中有一个指针,指针维护了一个数组

string容器提供copy、find、insert、replace等等功能

使用string容器需要使用string头文件,即# include <string>

1.2 string容器常用操作

1.2.1 string的构造函数
/*
string();//创建一个空的字符串 例如: string str;
string(const string& str);//使用一个 string 对象初始化另一个 string 对象
string(const char* s);//使用字符串 s 初始化
string(int n, char c);//使用 n 个字符 c 初始化
*/
string str;
string str1("hello");
string str2(str1);
string str3(5, 'a');
cout << str << endl; //空字符串
cout << str1 << endl; //hello
cout << str2 << endl; //hello
cout << str3 << endl; //aaa //注意:每一行代码是一个单独的例子
1.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 赋给当前字符串
string& assign(const string &s, int start, int n);//将 s 从 start 开始 n 个字符赋值给字符串
*/ string str;
string str1("helloworld"); str = "hehe"; //hehe
str = str1; // helloworld
str = 'a'; // a
str.assign("abcdefg"); //abcdefg
str.assign("abcdefg", 3); // abc
str.assign(str1);// helloworld
str.assign(5, 'c'); //ccccc
str.assign(str1, 0, 4); //hell //注意:每一行代码是一个单独的例子
1.2.3 string中内容的访问
/*
char& operator[](int n);//通过[]方式取字符
char& at(int n);//通过 at 方法获取字符
通过迭代器访问
*/

(1) 通过下标访问

int main() {
string str = "abcdefg"; cout << str[0] << endl; // a return 0;
}

(2) 通过at 方法获取字符

int main() {
string str = "abcdefg"; cout << str.at(2) << endl; // c return 0;
}

(3)通过迭代器访问

string迭代器的定义:string::iterator it;

int main() {
string str = "abcdefg";
string::iterator it = str.begin(); cout << *(it + 3) << endl; //d return 0;
}
1.2.4 string的拼接操作
/*
string& operator+=(const string& str);//重载+=操作符
string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& append(const char *s);//把字符串 s 连接到当前字符串结尾
string& append(const char *s, int n);//把字符串 s 的前 n 个字符连接到当前字符串结尾
string& append(const string &s);//同 operator+=()
string& append(const string &s, int pos, int n);//把字符串 s 中从 pos 开始的 n 个字符连接到当前字符串结尾
string& append(int n, char c);//在当前字符串结尾添加 n 个字符
*/ string str1 = "abc", str2 = "def", str3, str4; str3 = str1 + str2; // abcdef
str3 = str1 + "666"; //abc666
str3 = str1 + 'a'; //abca
str3.append(str1); //abc
str3.append("abcdef", 2); //ab
str2.append(str1); //defabc
str3.append(str1, 1, 2); //bc
str4.append(4, 'x'); //xxxx //注意:每一行代码是一个单独的例子
1.2.5 string的查找
/*
int find(const string& str, int pos = 0) const; //查找str第一次出现位置, 从pos开始查找(pos可以省略,默认从0开始)
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 c, int pos = 0) const; //查找字符 c 最后一次出现位置
*/ //常用:
string str = "Thank you for your smile";
string str2 = "you";
string str3 = "me"; cout << str.find(str2) << endl; //6
cout << str.find(str2, 8) << endl; // 14
cout << str.find(str3) << endl; // 常数string::npos用作为find函数失配时的返回值,为-1或者4294967295 //注意:每一行代码是一个单独的例子
1.2.6 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
str.replace(it1, it2, str2)把str的迭代器[it1, it2)范围的子串替换为str2
*/ string str = "Maybe you will turn around";
string str2 = "will not";
string str3 = "surely"; string::iterator it = str.begin();
cout << str.replace(10, 4, str2) << endl; // Maybe you will not turn around
cout << str.replace(it + 6, it + 9, str3) << endl; // Maybe surely will turn around //注意:每一行代码是一个单独的例子
1.2.7 字符串的比较
/*
compare 函数在>时返回 1,<时返回 -1,==时返回 0。
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的 A 比小写的 a 小。 比较规则是字典序
int compare(const string &s) const;//与字符串 s 比较
int compare(const char *s) const;//与字符串 s 比较
*/ string str1 = "aa";
string str2 = "aa";
string str3 = "xyz"; cout << str1.compare(str2) << endl; // -1 因为str1 < str2
cout << str3.compare(str1) << endl; // 1 因为str3 > str1
cout << str1.compare(str2) << endl; // 0 因为str1 == str2
1.2.8 字符串的长度
/*
length()/size()都返回string的长度,即存放的字符数
*/
string str = "abcdef";
str.size(); //6
str.length(); //6
1.2.9 字符串的子串
/*
string substr(int pos = 0, int n = npos) const;//返回由 pos 开始的 n 个字符组成的字符串
*/ string str1 = "Thank you for your smile"; string s = str1.substr(0, 5); // Thank
str1.substr(6, 3); // you
1.2.10 string::npos
string::npos是一个常数,其本身的值为-1,但由于是unsigned_int类型,因此实际上也可以被认为是unsigned_int类型的最大值。
这个值在string成员函数中作len(或subblen)参数的值时,表示“知道字符串结束”;
作为返回值,它常用语表示没有匹配
1.2.11 字符串的插入
/*
string& insert(int pos, const char* s); //在pos的位置 插入字符串常量
string& insert(int pos, const string& str); //在pos的位置,插入字符串对象
string& insert(int pos, int n, char c);//在指定位置插入 n 个字符 c
insert(it1, it2, it3); it1为原字符串的欲插入位置,it2和it3为待插入字符串的首位迭代器,用来表示串[it2, it3)将被插在 it1上
*/
string str1 = "Thank you";
string str2 = "Love you"; cout << str1.insert(1, "aaa") << endl; //Taaahank you
cout << str2.insert(4, str1) << endl; //LoveThank you you
cout << str1.insert(2, 5, 'c'); //Thcccccank you str1.insert(str1.begin() + 2, str2.begin() + 1, str2.begin() + 5);
cout << str1 << endl; //Thove ank you //注意:每一行代码是一个单独的例子
1.2.12 字符串的删除
/*
1、删除单个元素:
str.erase(it)用于删除单个元素,it为需要删除的元素的迭代器
2、删除一个区间内的所有元素:
str.erase(first, last), 其中first为需要删除的区间的起始迭代器,last为末尾迭代器的下一个地址,即[first,last)
string& erase(int pos, int n = npos);//删除从 Pos 开始的 n 个字符
*/ string str = "abcdefg"; str.erase(str.begin() + 4); //abcdfg
str.erase(str.begin() + 1, str.begin() + 4); //aefg
str.erase(2, 4); //abg
1.2.13 字符串的清除
/*
str.clean()用以清空string中的数据
*/
string str = "abcdefg";
str.clean();
cout << str.length() << endl; //0
1.2.14 string和c风格的转换
void main(){
string str1; //对象
char* str2 = "hello str2"; //将char* 转换成 string(直接完成)
str1 = str2;
cout << str1 << endl; // hello str2 string str3 = // hello str2
//不能直接将string转换成char* 必须借助string中的c_str方法完成
//char* str4 = str3; 错误 char* str4 = const_cast<char *>(str3.c_str());
//const_cast < type-id > ( expression ) 去掉const属性
cout << str4 << endl; // hello str3 return 0;
}

最新文章

  1. 一张图告诉你,只会HTML还不够!
  2. 软件开发常用设计模式—单例模式总结(c++版)
  3. centos环境自动化批量安装软件脚本
  4. Windows内存小结
  5. 原生js下拉菜单
  6. 2017.1.8a版给信息源新增:max_len、max_db字段
  7. 应用Java(环境变量)
  8. Log4j 2.0 使用说明
  9. 以正方教务系统为例,用php模拟登陆抓取课表、空教室
  10. HDOJ 4964 Emmet
  11. poj 3237 Tree(树链拆分)
  12. 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
  13. Qt中的ui指针和this指针
  14. MAMP环境下为Mac OSX安装设置PHP开发环境
  15. 【摘】Oracle 11g EM安全证书问题无法访问的解决办法
  16. javascript OOP实例—探测器
  17. vue项目未加载完成前显示loading...
  18. P2057 [SHOI2007]善意的投票
  19. python安装mysqlclient模块报fatal error: Python.h:解决方法
  20. nodemon:让node自动重启

热门文章

  1. 3、搭建 rsync备份服务器
  2. flex中Button事件中的e.target
  3. MySQL 数据库恢复一张表中的数据
  4. XCTF 进阶区 CAT
  5. Acunetix敏感的数据泄露–泄露如何发生
  6. 深入浅出图神经网络 第6章 GCN的性质 读书笔记
  7. 5.Java流程控制
  8. CLion安装、激活、配置教程
  9. C语言:易错题
  10. python:录屏录音