C++STL—string类
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;
}
C++STL—string类的更多相关文章
- C++标准模板库Stand Template Library(STL)简介与STL string类
参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...
- STL --> string类字符串
基本使用方法 一.输入 string s: cin >> s; getline(cin, s) ; //使用默认的'\n'作为终止符 getline(cin, s, '!') ; //以' ...
- C++STL(一)——string类
STL--string类 初始化 string的赋值 string的连接 string的性质描述 遍历 字符指针和string的转化 查找.替换.交换 字符串的拼接 区间删除. 插入 大小写转换 比较 ...
- STL 的string类怎么啦?
前言 上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度的加深,到了后期,他几乎对strin ...
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- STL:string类中size()与length()的区别
结论是:两者没有任何区别 解释: C++Reference中对于两者的解释: 两者的具体解释都一模一样: 理解: length是因为C语言的习惯而保留下来的,string类最初只有length,引进S ...
- C++ STL介绍——String类
目录 1.简介 2.string类成员函数汇总 3.String类的构造函数以及析构函数 4.获取字符串长度 5.获取字符串元素 6.字符串比较方法 7.字符串输入输出 8.字符串查找函数 1.简介 ...
- 自定义String类,并且实现在STL容器中添加自定义的类型
13.44 编写标准库string类的简化版本,命名String.你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数.使用allocator为你的String类分配所需内存. 1 ...
- STL之string类详解
通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了!下面先罗列出string类 ...
随机推荐
- 15、linux文件、目录的权限及如何改变权限(root用户不受任何权限的限制)
15.1.linux普通文件的读.写.执行权限说明: r:读,表示具有读取\阅读文件内容的权限: w:可写,表示具有新增,修改文件内容的权限: 如果没有r配合,那么vi编辑文件会提示无法编辑(但可以强 ...
- 8 shell if else
if 语句的判断条件,从本质上讲,判断的就是命令的退出状态. 语句 语句格式 同一行书写 注意点 用例1 用例2 if 语句 if conditionthen statement(s)fi if ...
- MySQL服务器 IO 100%的分析与优化方案
前言 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等 ...
- 计算机网络体系结构整理-第九单元移动IP
第九章 移动IP 什么是移动:移动指的是用户连接位置的改变,而不是设备物理位置的改变 移动可以是离散的或连续的 移动IP的基本要求:1.IP地址不变 2.宿地址路由 3.信息量和交互简化 4.安全 5 ...
- 第六章 time库的使用
time库概述 time库是python中处理时间的标准库 1.用于计算机时间的表达 2.提供获取系统时间并格式化输出功能 3.提供系统级精确计时功能,用于程序性能分析 1 import time 2 ...
- cut和grep 选取命令
cut命令 cut:将一段信息的某一段"切"出来,处理的信息是以行为单位.参数: -d :后接分隔字符,与-f一起使用: -f :依据-d的分隔字符将一段信息切割成为数段,用-f取 ...
- mybatis 加载策略及注解开发
1. 延迟策略 在需要用到数据时在加载相关数据,常用于一对多关系, 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能, 缺点:当需要用到数据时,才会进行数据库查询,这样在大批量数据查 ...
- [刘阳Java]_Spring AOP注解详细介绍_第8讲
这节内容非常关键,我们会比较详细地介绍Spring AOP注解的使用 1. 要使用Spring AOP注解,必须满足如下的事项 导入Aspectj的jar.Spring3.0-AOP.jar.aopa ...
- NOI2021游记
NOI2021游记 前言 写于 2021.7.28,成绩榜刚出后几个小时.总分 345 拿到银牌 183 名. 我的高中 OI 生活在这里画上句号.结局对我而言虽然不够完美,但是无论怎样都是我人生道路 ...
- Springboot+Mybatis+小程序
思维导图: 项目效果图 一览界面: 新增界面: