C++ 标准库类型 string

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)         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值