欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ 标准库类型 string

程序员文章站 2022-03-24 08:29:22
...

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 对象的操作

C++ 标准库类型 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 对象中的字符

C++ 标准库类型 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)