【C++入门到精通】C++入门 —— string类(STL)下

简介: 【C++入门到精通】C++入门 —— string类(STL)下

⭕子串操作


       在 std::string类中,提供了多种方法来进行子串操作,即从一个字符串中获取部分字符组成新的子串。这些方法可以用于检索、提取和操作字符串的特定部分。


✅substr() 函数

substr(pos, count):从位置 pos 开始,提取长度为 count 的子串。


std::string str = "Hello, World!";
std::string sub1 = str.substr(0, 5);   // 获取从位置0开始的5个字符,得到子串"Hello"
std::string sub2 = str.substr(7);      // 获取从位置7开始到末尾的子串,得到子串"World!"

✅getline() 函数

getline(input_stream, str, delimiter):从输入流 input_stream 中读取一行字符,并将结果存储在字符串 str 中,以指定的分隔符 delimiter 结束,分隔符默认为换行符。


std::string input;
std::getline(std::cin, input);   // 从标准输入读取一行字符,存储在input字符串中

✅find() 函数

find(substring, pos):从位置 pos 开始,在字符串中搜索子串 substring,返回第一次出现的位置;如果未找到,返回 std::string::npos


std::string str = "Hello, World!";
size_t pos = str.find("World");    // 在字符串中搜索子串"World",得到位置7

✅rfind()函数

rfind(substring, pos):从字符串中的pos位置开始,从后向前搜索子串substring,返回最后一次出现的位置。如果找不到子串,则返回std::string::npos。


std::string str = "Hello, World!";
size_t pos = str.rfind("o");    // 从位置12开始,从后向前搜索字符"o",得到位置8

✅find_first_of()函数

find_first_of(chars, pos):从字符串中的pos位置开始,搜索位于字符集chars中的任何一个字符第一次出现的位置。如果找不到任何字符,则返回std::string::npos


std::string str = "Hello, World!";
size_t pos = str.find_first_of("Wdl");    // 从位置0开始,在字符串中搜索字符集"Wdl"中的

任一字符,得到位置2(字符"l"第一次出现的位置)

✅find_last_of()函数

find_last_of(chars, pos):从字符串中的pos位置开始,从后向前搜索位于字符集chars中的任何一个字符最后一次出现的位置。如果找不到任何字符,则返回std::string::npos


std::string str = "Hello, World!";
size_t pos = str.find_last_of("odl");    // 从位置12开始,从后向前搜索字符集"odl"中的任一字符,得到位置10(字符"l"最后一次出现的位置)

✅replace() 函数:

replace(pos, count, new_string):从位置 pos 开始,替换长度为 count 的子串为 new_string


std::string str = "Hello, World!";
str.replace(7, 5, "Everyone");     // 从位置7开始,将长度为5的子串"World"替换为字符串"Everyone"

       通过这些子串操作方法,可以方便地提取特定的子串、查找特定的字符位置、替换子串等,以满足具体的字符串处理需求。


⭕字符串比较


       在std::string类中,提供了多种方法来进行字符串的比较操作,用于判断两个字符串是否相等或者确定它们的大小关系。这些方法可以通过操作符重载和成员函数来实现。


✅操作符重载

  • == :检查两个字符串是否相等。
  • != :检查两个字符串是否不相等。
  • < :检查第一个字符串是否小于第二个字符串(按字典序比较)。
  • > :检查第一个字符串是否大于第二个字符串(按字典序比较)。
  • <= :检查第一个字符串是否小于等于第二个字符串(按字典序比较)。
  • >= :检查第一个字符串是否大于等于第二个字符串(按字典序比较)。
std::string str1 = "Hello";
std::string str2 = "World";
bool isEqual = (str1 == str2);    // 判断两个字符串是否相等
bool isNotEqual = (str1 != str2); // 判断两个字符串是否不相等
bool isLess = (str1 < str2);      // 判断str1是否小于str2
bool isGreater = (str1 > str2);   // 判断str1是否大于str2
bool isLessOrEqual = (str1 <= str2);    // 判断str1是否小于等于str2
bool isGreaterOrEqual = (str1 >= str2); // 判断str1是否大于等于str2

✅成员函数

compare(str):按字典序比较当前字符串和参数字符串str。返回一个整数,表示比较结果。


  • 返回值 < 0:当前字符串小于str。
  • 返回值 > 0:当前字符串大于str。
  • 返回值 = 0:当前字符串等于str。
std::string str1 = "Hello";
std::string str2 = "World";
int result = str1.compare(str2);   // 比较str1和str2


⭕字符串修改


       在std::string类中,提供了多种方法来修改字符串的内容,这些方法可以用于插入、删除、替换字符或子串,以及改变字符串的大小等操作。


✅插入字符或子串

insert(pos, str):在指定位置 pos 前插入字符串 str


insert(pos, str, subpos, sublen):在指定位置 pos 前插入字符串 str 的子串,子串长度为 sublen,起始位置为 subpos


std::string str = "Hello";
str.insert(5, "World");      // 在位置5前插入字符串"World",得到字符串"HelloWorld"
str.insert(0, "I am ", 2, 4);// 在位置0前插入字符串"I am "的子串"am ",得到字符串"am HelloWorld"

✅删除字符或子串

erase(pos, count):从指定位置 pos 开始,删除 count 个字符。


std::string str = "Hello, World!";
str.erase(5, 7);            // 从位置5开始删除7个字符,得到字符串"Hello!"

✅替换字符或子串

replace(pos, count, str):从指定位置 pos 开始,将长度为 count 的子串替换为字符串 str


std::string str = "Hello, World!";
str.replace(7, 5, "Everyone");  // 从位置7开始,将长度为5的子串"World"替换为字符串"Everyone",得到字符串"Hello, Everyone!"

✅改变字符串大小

resize(new_size):改变字符串的大小为 new_size,截断或填充空字符。


resize(new_size, fill):改变字符串的大小为 new_size,使用字符 fill 填充。


std::string str = "Hello";
str.resize(10);            // 将字符串大小改变为10,默认用空字符填充,得到字符串"Hello     "
str.resize(7, '!');        // 将字符串大小改变为7,用字符'!'填充,得到字符串"Hello!!"

       通过这些字符串修改方法,可以方便地插入、删除、替换字符或子串,以及改变字符串的大小,以满足不同的字符串处理需求。根据具体情况选择最适合的方法来修改字符串。


⭕获取字符的ASCII码


       在C++的std::string类中,可以使用索引操作符[]或成员函数at()来获取字符串中特定位置字符的ASCII码。


✅索引操作符[]

str[index]:返回字符串str中位置为index的字符的ASCII码。请注意,索引从0开始。


std::string str = "Hello";
char ch = str[0];         // 获取字符串第一个字符'H'
int ascii = static_cast<int>(ch);   // 转换字符为ASCII码

✅成员函数at():

str.at(index):返回字符串str中位置为index的字符的ASCII码。如果索引超出了字符串的范围,at()函数会抛出std::out_of_range


std::string str = "Hello";
char ch = str.at(1);      // 获取字符串第二个字符'e'
int ascii = static_cast<int>(ch);   // 转换字符为ASCII码

       在上面的代码中,我们先获取到字符串中特定位置的字符,然后使用static_cast(ch)将字符转换为相应的ASCII码。注意,将字符转换为整数类型可以使用static_cast来进行显式类型转换。


⭕字符串大小写转换:


       在C++的std::string类中,提供了一些方法来进行字符串的大小写转换操作。这些方法可以将字符串中的字符转换为大写或小写形式。


✅换为大写

toupper()函数:将字符串中的字符转换为大写形式。


std::string str = "Hello, World!";
for (char& c : str) {
    c = std::toupper(c);   // 将字符转换为大写形式
}

✅换为小写

tolower()函数:将字符串中的字符转换为小写形式。


std::string str = "Hello, World!";
for (char& c : str) {
    c = std::tolower(c);   // 将字符转换为小写形式
}

       在上面的代码中,我们使用循环遍历字符串中的每个字符,并通过std::toupper()和std::tolower()函数将其转换为大写或小写形式。请注意,这些函数返回转换后的字符,并且在循环中我们通过引用来修改原始字符串。


✅C++标准库转换

       除了使用循环遍历字符进行转换,还可以使用C++标准库算法和字符串迭代器来实现字符串的大小写转换:


#include <algorithm>
#include <cctype>
std::string str = "Hello, World!";
std::transform(str.begin(), str.end(), str.begin(), ::toupper);   // 将字符串转换为大写形式
std::transform(str.begin(), str.end(), str.begin(), ::tolower);   // 将字符串转换为小写形式

       在上面的代码中,我们使用std::transform()算法和字符处理函数::toupper和::tolower来实现字符串的大小写转换。::toupper和::tolower是函数指针,用于执行字符的大写和小写转换。


总结


       本文通过对STL(Standard Template Library)和string类的介绍,为读者提供了对STL和string类的全面了解。在STL简介部分,我们了解到STL是C++标准库的重要组成部分,分别是容器、算法、迭代器、函数对象、适配器和分配器六个核心内容,使用前需要掌握C++的基本语法和模板的使用。在string类部分,我们深入研究了string类的定义、特点和常见操作。构造和初始化包括使用初始化列表初始化和初始化总结,字符串大小和容量提供了获取字符串大小和容量的方法,字符访问和修改可以方便地操作字符串的字符,字符串连接和拼接可以合并字符串,子串操作可以从字符串中提取子串。字符串比较提供了多种方法来比较字符串的大小关系,字符串修改可以插入、删除和替换字符或子串,获取字符的ASCII码可以得到字符的ASCII码值,而字符串大小写转换可以将字符串转换为大写或小写形式。通过本文的学习,读者将掌握STL的基本概念和string类的常用操作,从而能够更加灵活和高效地处理和操作字符串。


温馨提示


       感谢您对博主文章的关注与支持!在阅读本篇文章的同时,我们想提醒您留下您宝贵的意见和反馈。如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于C++以及编程技术问题的深入解析、应用案例和趣味玩法等。请继续关注博主的更新,不要错过任何精彩内容!


       再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!

7c319c17abbcbb2c09c5b8e2fccb5364_86b16535c35542b6b64787db3c833a2b.jpeg


目录
相关文章
|
2天前
|
存储 C++ 容器
C++:STL - set & map
C++:STL - set & map
10 4
|
2天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
7 1
|
2天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
9 0
|
2天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
11 0
【C++】string学习 — 手搓string类项目
|
1月前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
16 0
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2
|
2天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
|
5天前
|
存储 缓存 安全
【 Java中String源码分析(JVM视角你不来看看?】
【 Java中String源码分析(JVM视角你不来看看?】
10 0
|
11天前
|
Java
Java String类型转换成Date日期类型
Java String类型转换成Date日期类型
|
12天前
|
Java 索引
Java String应用与开发
Java String应用与开发
21 0