C++ STL 容器 string

string 是 C++ 对数据结构字符动态数组的实现。要使用 string,请在程序头添加:

#include <string>
using name space std;

string 对象的定义与初始化

string<int> s; 定义一个空 string 对象
string<int> s(3,'a'); s = "aaa"
string<int> s("aaa");
string<int> s1(s); s1 = s
string<int> s1 = s;
string<int> s { "abc" }; s = "abc"
string<int> s = { "abc" };
string<int> s = "abc";

向 string 对象添加元素

string 可以看做是一种专门用于存储字符的 vector,因此与 vector 大部分的操作也类似。

使用 push_back 在 string 尾部插入元素

string s ("abc");
s.push_back('d'); // s = "abcd";

使用 insert 在 string 任意位置插入元素

插入单个元素

string s ("abc");
s.insert(s.begin(), 'd'); // s = "dabc";

插入一段元素

string s ("ab");
string s1 ("cd");
s1.insert(s1.begin(), s.begin(), s.end()); // s1 = "abcd";

在循环中插入元素
插入元素通常会使迭代器失效,这会给在循环中插入元素带来不小的麻烦。insert 操作在插入元素成功后会返回插入位置的有效迭代器。

string s ("ab");
string s1 ("cd");
auto it = s1.begin();
for (auto c:s)auto it = s1.insert(it, c);
// s1 = "bacd";

删除 string 中的一个元素

使用 pop_back 删除 string 尾元素

string s ("abc");
s.pop_back(); // s = "ab";

使用 erase 删除 string 中任意位置的元素

删除一个元素

string s ("abc");
s.erase(s.begin()); // s = "bc";

删除一段元素

string s ("abc");
s.erase(s.begin(), s.begin()+2); //  s = "c";

在循环中删除元素
删除元素通常会使迭代器失效,这会给在循环中删除元素带来不小的麻烦。erase 操作在插入元素成功后会返回插入位置的有效迭代器。

string s ("abcd");
auto it = s.beign();
while (it!=s.end()) {//删除 c 之前的字母if (*it < 'c')auto it = s.erase(it);elseit++;}
// s = "c";

访问 string 中的元素

使用下标访问

像数组一样,string 支持下标随机访问

string s ("abcd");
cout << s[1]; // 输出 b

使用迭代器进行访问

string s ("abcd");
//将 s 中在 c 前面的字母置为 c
for (auto it=s.begin(); it!=s.end(); it++) {if (*it < c)*it = c;
}
// s = "cccd"

使用 C++ 11 新特性访问

string s ("abcd");
//输出 s 中在 c 之前的字母
for (auto e : s) {if (e < 'c') cout << e;
}
// 输出:ab

注意:这种方式得到的 e 是 s 中元素的拷贝,若想要得到 s 元素的本身,请使用 &
for (auto &e:s)

string 搜索操作

string 类提供了 6 个不同的搜索函数。每个搜索函数都返回一个 string :: size_type 类型的值,表示匹配发生位置的下标。如果搜索失败,则返回一个名为 string :: npos 的 static 成员 (string :: size_type npos = -1,由于 string :: size_type 实际上就是 unsigned int 类型,故 npos == UINT_MAX)

s.find(c)s.find(s1)
在 s 搜索指定的字符 c 或者字符串 s1,返回第一个匹配位置的下标。

string s {"hello"};
cout << s.find('l'); // 输出 2
cout << s.find("he");// 输出 0
cout << s.find("eo");// 输出 UINT_MAX

s.rfind(c)s.rfind(s1)
在 s 中搜索指定的字符 c 或者字符串 s1,返回最后一个匹配位置的下标。

s.find_first_of(c)s.find_first_of(s1)
在 s 中搜索指定的字符 c 或者字符串 s1 中的任何一个字符,返回第一个匹配位置的下标。

string s {"hello"};
cout << s.find_first_of('l'); // 输出 2
cout << s.find_first_of("eo");// 输出 1

s.find_last_of(c)s.find_last_of(s1)
在 s 中搜索指定的字符 c 或者字符串 s1 中的任何一个字符,返回最后一个匹配位置的下标。

s.find_first_not_of(c)s.find_first_not_of(s1)
在 s 中搜索不是字符 c 或者不在字符串 s1 中的字符,返回第一个匹配位置的下标。

string s {"hello"};
cout << s.find_first_not_of('h'); // 输出 1
cout << s.find_first_not_of("heo");// 输出 2

s.find_last_not_of(c)s.find_last_not_of(s1)
在 s 中搜索不是字符 c 或者不在字符串 s1 中的字符,返回最后一个匹配位置的下标。

指定开始搜索的位置

上述 string 的 6 个搜索函数都有一个带有指定开始加搜索位置的参数的重载版本。如:
s.find(c, string::size_type pos)

string 流

sstream 头文件定义了三个类型来支持内存 IO。
istringstream 从 string 读取数据,ostringstream 向 string 写入数据,而 stringstream 既可以从 string 读取数据,也可以向 string 写入数据。要使用这些类型,需要包涵头文件
include<sstream>
using namespace std;

string 流的创建与绑定

istringstream is; 创建一个输入流
ostringstream os;
stringstream ss;
istringstream is(s); 创建一个输入流并绑定 string s
ostringstream os(s);
stringstream ss(s);
is.str(); 返回 is 绑定的 string
os.str();
ss.str();
is.str(s); 将 string s 拷贝(绑定)到 is 中
os.str(s);
ss.str(s);

使用 istringstream

在进行处理文本时,如果文本中的元素类型混杂(例如既有数字也有单词),亦或元素的数目不定。使用 istringstream 将带来很大的方便。

例如,输入算式的值,需要我们计算这个算式的值。一个必要的预处理便是将输入字符串中的数字和运算符号解析出来。使用 istreamstring 可以很轻松的完成这一工作

string str;
cin >> str;
str.push_back('$'); // 为方便处理,添加一个结束标记符 $
istringstream is(str);
vector<int> nums;
vector<char> syms;
int n;
char c;
while (is >> n) {nums.push_back(n);is >> c;syms.push_back(c);
}
// 输入:2*3 - 5/4 + 6
// nums = { 2, 3, 5, 4, 6 }; syms = { '*', '-', '/', '+', '$' };

使用 ostringstream

有时,我们输出的内容中包含多种多样的元素类型,此时可先将一些输出写入输出流,带输出流填充完毕后,再一次性地输出。

例如,假设我们要读取一行以空格分开的数字,并将分隔符由空格变为等号输出。

string str;
getline(cin, str); // 输入:1 2 3 4 5
istringstream is(str);
ostringstream os;
int n;
is >> n; // 为了不在最末尾添加‘,’,进行了一下调整
os << n;
while (is >> n) {os << ',';os << n;
}
cout << os.str(); // 输出:1,2,3,4,5

C++ string 详解相关推荐

  1. C++ string详解

    C++ string详解 -------------------------------------------------------------------------------- 来源:CSD ...

  2. (49)System Verilog字符串string详解

    (49)System Verilog字符串string详解 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog字符串string详解 5) ...

  3. String详解(intern、StringBuffer、StringBuilder)

    "+"操作符,它执行的加入对原始类型(如int和double),重载对String对象进行操作.'+'两个字符串操作数进行串联. java不考虑让开发者支持运算符重载.在支持运算符 ...

  4. C++中string详解与用法

    string详解 string不是基本数据类型,是C++中对char封装成的类,所以C语言中没有string. String类是不可变的,对String类的任何改变,都是返回一个新的String类对象 ...

  5. C++string详解

    之所以抛弃char*的字符串而选用 C++ 标准程序库中的 string 类,是因为他和前者比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下 ...

  6. C#String详解

    字符串:string Length - 字符串的长度. TrimStart() 压缩空格即消除字符串开始空格 TrimEnd() 消除结尾空格 Trim() 同时消除开头和结尾空格.注:中间空格不消除 ...

  7. C++ 标准程序库std::string 详解

    现在一般不再使用传统的char*而选用C++标准程序库中的string类,是因为string标准程序和char*比较起来,不必担心内存是否足够.字符串长度等等,而且作为一个类出现,集成的操作函数足以完 ...

  8. java atd_Java字符串String详解

    1.String字符串 实例化String对象: (1)直接赋值,如:String str="hello"; (2)使用关键字 new,如:String str=new Strin ...

  9. c++ string详解 assign

    assign方法可以理解为先将原字符串清空,然后赋予新的值作替换. 返回类型为 string类型的引用.其常用的重载也有下列几种: a. string& assign ( const stri ...

最新文章

  1. CentOS 自动备份MySQL
  2. 开发中常见的十种对缓存的错误使用
  3. Multiple methods named 'status' found with mismatched result, parameter type or attributes
  4. mysql 当天创建分区表_mysql8.0 定时创建分区表记录 每天定时创建下一天的分区表...
  5. tushare 安装
  6. 自己动手写DB数据库框架(增)
  7. html项目_趣图:我是一个 HTML 开发者,你们看看我做的这个项目咋样?
  8. 几个IE与Firefox的兼容性问题 (一、网络转载)
  9. DB2 亲身实例(GUI界面) 加 笔记和注意事项
  10. linux搭建vsftp服务器_Linux(CentOS 7)搭建VSFTP服务器
  11. 色彩设计基础知识整理
  12. 'rm' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  13. 某网站提供的免费香港虚拟主机测试
  14. 下载阿里云免费ssl证书
  15. 【李宏毅】机器学习-RNN
  16. 传递关系的复合不一定是传递的
  17. 12个超好用的配色网站
  18. 静息状态脑电图节律和地形分析的建议
  19. 【C语言入门小游戏】三子棋
  20. MATLAB分段函数及应用实例

热门文章

  1. 月薪 5 万清华姚班 NOI 金牌得主在线征友被群嘲,当代互联网相亲有多难
  2. 我给 Apache 顶级项目提了个 Bug
  3. 聊聊离京后的一些感受
  4. Spring源码分析之 lazy-init 实现原理
  5. 【转载】Java异常控制机制和异常处理原则
  6. SEGGER RTT STOP/SLEEP 模式下使用
  7. ECMAScript 6入门
  8. shell--特殊位置参数变量及常用内置变量
  9. AngularJS中使用HTML5摄像头拍照
  10. WhatsApp宣布免费 欲变身一站式企业式服务应用