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类的更多相关文章

  1. C++标准模板库Stand Template Library(STL)简介与STL string类

    参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...

  2. STL --> string类字符串

    基本使用方法 一.输入 string s: cin >> s; getline(cin, s) ; //使用默认的'\n'作为终止符 getline(cin, s, '!') ; //以' ...

  3. C++STL(一)——string类

    STL--string类 初始化 string的赋值 string的连接 string的性质描述 遍历 字符指针和string的转化 查找.替换.交换 字符串的拼接 区间删除. 插入 大小写转换 比较 ...

  4. STL 的string类怎么啦?

    前言   上个周末在和我的同学爬香山闲聊时,同学说到STL中的string类曾经让他备受折磨,几年前他开发一个系统前对string类还比较清楚,然后随着程序的复杂度的加深,到了后期,他几乎对strin ...

  5. STL库中string类内存布局的探究

    在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...

  6. STL:string类中size()与length()的区别

    结论是:两者没有任何区别 解释: C++Reference中对于两者的解释: 两者的具体解释都一模一样: 理解: length是因为C语言的习惯而保留下来的,string类最初只有length,引进S ...

  7. C++ STL介绍——String类

    目录 1.简介 2.string类成员函数汇总 3.String类的构造函数以及析构函数 4.获取字符串长度 5.获取字符串元素 6.字符串比较方法 7.字符串输入输出 8.字符串查找函数 1.简介 ...

  8. 自定义String类,并且实现在STL容器中添加自定义的类型

    13.44 编写标准库string类的简化版本,命名String.你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数.使用allocator为你的String类分配所需内存. 1 ...

  9. STL之string类详解

    通过在网站上的资料搜集,得到了很多关于string类用法的文档,通过对这些资料的整理和加入一些自己的代码,就得出了一份比较完整的关于string类函数有哪些和怎样用的文档了!下面先罗列出string类 ...

随机推荐

  1. ps 快速去掉不需要的部分

    1.打开图片---使用套索工具将不需要的圈起来----右键填充--直接点击确定就可以了

  2. Java数据库开发(二)之——DBCP连接数据库

    1.载入jar包 DBCP需要以下几个jar包,可到apache及mysql的官网下载 2.程序编写 public static BasicDataSource ds = null; static f ...

  3. linux设备驱动编写入门

    linux设备驱动是什么,我个人的理解是liunx有用户态和内核态,用户空间中是不能直接对设备的外设进行使用而内核态中却可以,这时我们需要在内核空间中将需要的外设驱动起来供用户空间使用.linux的驱 ...

  4. 别错过了,130+个微信小程序源码 “限时分享“

    ​里面有130+款微信小程序源码和效果图,我只放了其中几款小程序的截图,具体请看下方图片 ​ ​ ​ ​ ​ ​ ​ ​ 仿网易云音乐小程序源码 链接:https://pan.baidu.com/s/ ...

  5. 深入理解 SynchronizationContext

    深入理解 SynchronizationContext 目录 深入理解 SynchronizationContext SynchronizationContext(后续以SC简称) 是什么? 1.1 ...

  6. java 的 IO简单理解

    首先要先理解什么是 stream ? stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源. 一.不同导向的 stream 1)以字节为单位从 stream 中读取或往 st ...

  7. 协程与Swoole的原理,相关应用以及适用场景等

    什么是协程 协程(Coroutine)也叫用户态线程,其通过协作而不是抢占来进行切换.相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低.协程是进程的补充,或者是互补关系. 要 ...

  8. Leetcode No.121 Best Time to Buy and Sell Stock(c++实现)

    1. 题目 1.1 英文题目 You are given an array prices where prices[i] is the price of a given stock on the it ...

  9. layim即时通讯实例各功能整合

    一.系统演示1.1 聊天窗体主界面演示 1.2 模拟两人在线聊天(点击图片查看演示视频) 1.3 在线演示> 在线演示,点击进入系统到这里,若是您想要的,接下来听我娓娓道来二.开发工具开发软件: ...

  10. python 15篇 面向对象

    1.面向对象编程概念 面向对象是包含面向过程 面向过程编程 买车: 1.4s看车,买车 2.上保险 保险公司 3.交税 地税局 4.交管所 上牌面向对象编程 卖车处: 1.4s 2.保险 3.交税 4 ...