C++ 标准库类型 string
一、string 类型的使用和定义
1、使用 string 类型
标准库类型 string 表示可变长的字符序列
#include <string>
using std::string;
2、定义和初始化 string 对象
直接初始化:使用括号
拷贝初始化:使用等号
// 直接初始化
string s1; // 默认初始化,空串
string s2(s1) // s2是s1的副本
string s3("value")
string s4(n, 'c') // 重复 n 个 c
// 拷贝初始化
string s2 = s1
string s3 = "value"
二、string 对象的操作
1、string::size_type 类型
string 类型的 size() 和下标的数据类型是size_type,是一种无符号整型数。不可与有符号类型混用
// 推导变量另外类型
string line("xxx");
// 法一
auto len = line.size();
// 法二
decltype(line.size()) len = line.size();
2、读写 string 对象
读取: string 对象会自动忽略开头的空白(空格符、换行符、制表符)从第一个非空字符读取直到遇见下一处空白为止。
输出: 与标准的输出一样
// 循环读取
string word;
while(cin >> word)
cout << word << endl;
//循环读取一行
string line;
while(getline(cin, line))
cout << line << endl;
3、string 对象比较与相加
string 对象比较:
- 从第一个字符开始比较
- 遇到字符不同的按字典顺序进行比较,得到结果
- 如果字符相同,比较长短
string 对象相加:
- 两个 string 对象相加即为拼接
- 可以一个 string 对象加一个字符串,返回的还是 string 对象
- 不能两个字符串相加,除非前面已经有 string 对象
4、处理 string 对象中的字符
for 语句访问 string 对象中的字符:
// declaration 变量是 expression 基础元素
for(declaration: expression)
statement
// 循环打印字符
string str("xxx")
for(auto c : str)
cout << c << endl;
// 使用引用改变 string对象的字符
string str("xxx")
for(auto &c : str)
c = toupper(c);
- declaration: 定义一个变量
- expression: string 对象
- statement: 对变量的操作
下标访问:
下标从 0 开始,小于 size()
// 将第一个单词改为大写形式
string s("xxxx")
for (decltype(s.size()) index = 0; index != s.size() && !isspace(s[index]); ++index)
s[index] = toupper(s[index]);
5、截取 string 的子串
// 截取s中从pos开始(包括0)的n个字符的子串,并返回
s.substr(pos, n)
// 截取s中从pos开始(包括0)到末尾的所有字符的子串,并返回
s.substr(pos)
6、替换 string 的子串
// 用s1替换s中从pos开始(包括0)的n个字符的子串
s.replace(pos, n, s1)
7、查找 string 的子串
// 查找s中第一次出现s1的位置,并返回(包括0)
s.find(s1)
// 查找s中最后次出现s1的位置,并返回(包括0)
s.rfind(s1)
// 查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
s.find_first_of(s1)
// 查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
s.find_last_of(s1)
// 查找s中第一个不属于s1中的字符的位置,并返回(包括0)
s.fin_first_not_of(s1)
// 查找s中最后一个不属于s1中的字符的位置,并返回(包括0)
s.fin_last_not_of(s1)