顺序容器---string详解
来源:互联网 发布:医院耗材管理软件 源码 编辑:程序博客网 时间:2024/04/29 23:57
前言
博客编写人:Willam博客编写时间:2017/3/21博主邮箱:2930526477@qq.com(有志同道合之人,可以加qq交流交流编程心得)
1、string的介绍
string是以char作为模板参数的模板类实例,把字符串的内存管理责任由string负责而不是由编程者负责,大大减轻了C语言风格的字符串的麻烦。
2、string的头文件
#include<string>using std::string;
3、string的常用的构造函数
1. string() //默认构造函数 2. string(const string & s);// 拷贝构造函数 3. string(const string & str,size_t pos,size_t len=nops) //substring 4. string(const char* s); //使用c风格的字符串进行赋值 5. string(const char * s,size_t n);//前n个字符 6. string(inputIterator first,inputIterator last); 7. string (size_t n, char c);
Example:
#include <iostream>#include<string>using namespace std;int main(){ string s0("A student"); //使用c风格 string s1(s0); //调用拷贝构造函数 string s2(s0, 2, 3); //调用子串那个构造函数,从下标2开始,拷贝三个 string s3("Another character sequence", 12);//取前12个字符 string s4(10, 'x'); //10个x, string s5(s0.begin(),s0.end());//记住这个范围为左闭右开区间 cout << s0 << endl; cout << s1 << endl; cout << s2 << endl; cout << s3 << endl; cout << s4 << endl; cout << s5 << endl; system("pause"); return 0;}
输出:
3、string的迭代器介绍
在这里先介绍一下,string中有4种类的迭代器类型:
- iterator
- const_iterator //c++ 11才有的东西
- reverse_iterator
- const_reverse_iterator //c++ 11才有的东西
如果不知道迭代器是什么,请参考:迭代器介绍
//迭代器begin(),返回的指向字符串第一个字符的迭代器,它的构造函数如下 1. iterator begin() 2. const_iterator begin()//只有我们的string类型是const类型时,才返回const_iterator,否则都返回iterator
//迭代器end(),返回指向字符串最后一个字符的下一个位置的迭代器,它的构造函数如下: 1. iterator end() 2. const_iterator end()//同样,只有我们的string类型是const类型时,才返回const_iterator,否则都返回iterator
//迭代器rbegin(),用于逆序读取串的内容,rbegin指向字符串最后一个字符,它的构造函数如下: 1. reverse_iterator rbegin() 2. const_reverse_iterator rbegin()//同样,只有我们的string类型是const类型时,才返回const_reverse_iterator,否则都返回reverse_iterator
//迭代器rend(),用于逆序读取串的内容,rend()指向字符串第一个字符的前一个位置,它的构造函数如下: 1. reverse_iterator rend() 2. const_reverse_iterator rend()//同样,只有我们的string类型是const类型时,才返回const_reverse_iterator,否则都返回reverse_iterator
//迭代器rend(),用于逆序读取串的内容,rend()指向字符串第一个字符的前一个位置,它的构造函数如下: 1. reverse_iterator rend() 2. const_reverse_iterator rend()//同样,只有我们的string类型是const类型时,才返回const_reverse_iterator,否则都返回reverse_iterator
下面这些迭代器都是c++ 11才提出来的,他们返回的都是各自对应的迭代器常量。 1. cbegin() //对应begin,但是返回都是const_iterator 2. cend() //对应end,但是返回都是const_iterator 3. crbegin() //对应rbegin,但是返回都是const_reverse_iterator 4. crend() //对应rend,但是返回都是const_reverse_iterator
下面则是对迭代器的使用示例:
#include <iostream>#include<string>using namespace std;int main(){ string s1 = "i am a student!"; //首先是对begin和end的使用 std::string::iterator start = s1.begin(); std::string::iterator end = s1.end(); //这个是指向无意义地址空间 //cout << *end << endl; 所以这里会出现异常 //用迭代器遍历字符串。 cout << "遍历字符串" << endl; while (start < end) { cout << *start; start = start + 1; } cout << endl; cout << "输出最后一个字符" << endl; cout << *(end - 1) << endl; cout << "逆序输出字符串" << endl; std::string::reverse_iterator rstart = s1.rbegin(); std::string::reverse_iterator rend = s1.rend(); while (rstart < rend) { cout << *rstart; rstart = rstart + 1; } cout << endl; //cout << *rend << endl; 这里会出现异常,因为它指向字符串第一个为的前一个位置 cout << "s1的cbegin返回的类型:" << typeid(s1.cbegin()).name() << endl; const string s2 = "dsafsa"; cout << "常量s2的begin返回的类型:" << typeid(s2.begin()).name() << endl; system("pause"); return 0;}
输出:
4、有关string的大小的操作函数
1. size() //返回字符串的长度(\0以前的子串个数) 2. length() //和size()一模一样 3. empty() //判断字符串的长度是否为0,不要用size和length判断,empty的效率更高 4. max_size() //返回string所能包含的最多的字符数 5. resize() //这个函数有两个版本,具体的介绍如下://void resize(size_type n, charT c)//void resize(size_type n)//改变string对象的内容为n个字符。//如果n小于string对象的长度,内容被减少为前面的n个字符,后面的被清除。//如果n大于string对象的长度,内容被附加需要的c字符以达到n个字符的长度。//第二个函数实际调用resize(n, char()),如果n大于string对象的长度,新的字符位置填充char的默认值,null字符。 6. capacity() //返回需要重新分配内存前,string所能包含的最大字符数。(重新分配则会造成迭代器失效) 7. reserve() //修改capacity返回的值 8. clear() //清空字符串。 9. shrink_to_fit() //c++ 11新标准 释放size和capacity之前多余的空间,最后会capacity和size返回值相同
使用示例:
#include <iostream>#include<string>using namespace std;int main(){ string s1 = "i am a student!"; cout << "s1.size()=" << s1.size() << endl; cout << "s1.lenght()=" << s1.length() << endl; if (!s1.empty()) { cout << "s1不为空" << endl; } cout << "s1.max_size()=" << s1.max_size() << endl; cout << "s1.capacity()=" << s1.capacity() << endl; //通过resize,取s1的前三个字符 s1.resize(3); cout << "取前三个字符:" << s1 << endl; s1.resize(5, 'n'); cout << "末尾添加两个n:" << s1 << endl; //通过reserve修改capacity,而且记住capacity只会增大,不会减少,所以 //如果reserve的参数小于size返回的值,则不会改变capacity返回的值 //s1.reserve(10),为改变capacity返回的值 s1.reserve(20); //注意capacity返回的值可能大于等于40,这个是reserve自己的机制决定的 cout << "修改后s1.capacity()=" << s1.capacity() << endl; //使用shrink_to_fit来释放没有使用的空间 s1.shrink_to_fit(); cout << "释放没有使用的空间后的capacity" << s1.capacity() << endl; system("pause"); return 0;}
输出:
5、string元素的读取
1. operator[] //运算符重载,但是它不会检查下标是否溢出 2. at() //它是调用了下标运算符的,但是它会检查下标是否溢出 3. back() //返回字符串的最后一个字符 4. front() //返回字符串的第一个字符
代码示例:
#include <iostream>#include<string>using namespace std;int main(){ string s1 = "i am a student!"; cout << s1[0] << endl; cout << s1.at(2) << endl; cout << s1.front() << endl; cout << s1.back() << endl; system("pause"); return 0;}
输出:
6、改变string内容的函数或操作符
1. operator+= //在string串的尾部追加字符,可以是字符也可以是字符串(c风格和string对象都可以) 2. append() //在string串的尾部追加内容,它有很多种重载类型,和string构造函数相似。(可参考:(http://www.cplusplus.com/reference/string/string/append/)) 3. push_back() //追加一个字符到字符串的末尾,参数为char 4. assign() //把字符串原来的内容全部更换为新的内容 5. insert() //插入一个字符或字符串到原来的字符中 6. erase() //删除字符串中内容 7. replace() //用字符或字符串替换原串的部分内容 8. swap() //交换两个字符串的内容 9. pop_back() //删除字符串最后一个元素
7、字符串的自己的操作函数
1. c_str() //原型为const char* c_str() ,返回的是const char * 2. data() //原型const char* data(),作用和c_str一样,但是它返回的是不以‘\0’结尾的字符串 3. copy() //原型size_t copy (char* s, size_t len, size_t pos = 0),取字符串中某段子串赋给s。 4. find() //查找字符或字符串是否在原串中 5. rfind() //同find函数,从字符串最后往前找字符或字符串 6. find_first_of()//查找包含子串中的任何字符,返回第一个位置 7. find_first_not_of() // 查找不包含子串中的任何字符,返回第一个位置 8. find_last_of() //查找包含子串中的任何字符,返回最后一个位置 9. find_last_not_of //查找不包含子串中的任何字符,返回最后一个位置 10. substr() //返回子串,原型:string substr (size_t pos = 0, size_t len = npos)
8、string中npos介绍
//定义static const size_type npos = -1;//npos可以表示string的结束位子,是string::type_size 类型的,也就是find()返回的类型。find函数在找//不到指定值得情况下会返回string::npos。
npos的介绍
0 0
- 顺序容器---string详解
- 顺序容器(四):string
- 【STL】容器 > 顺序容器 > string 容器
- c++顺序容器之string
- 顺序容器string操作介绍
- 顺序容器--vector的详解
- C++primer_顺序容器之string操作
- stl 顺序容器vector(priority_queue),顺序容器List,顺序容器deque(queue, stack)详解
- 顺序容器和关联容器添加新元素方法详解
- 第9章顺序容器——vector、string练习题
- 顺序容器(vector、deque、list、forward_list、array 、string)
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 顺序容器
- 前端常见的面试题
- 浅谈接口的封装和设计思想入门
- progressbar的简单使用
- ipad pro键盘快捷键
- 我的threejs学习笔记(三)——相机旋转
- 顺序容器---string详解
- C++模板实现链表队列
- 多标签分类问题
- Resin常用配置
- Js报错Uncaught SyntaxError: Unexpected token <
- 记2017.3.21阿里面试经历,java方向
- L2-013 红色警报 并查集
- 链表反转
- Pandas 分割字符串