【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


目录
相关文章
|
7天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
22 2
|
13天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
41 5
|
19天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
49 4
|
21天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
47 4
|
2月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
22 1
|
2月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
28 4
|
2月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
25 4
|
2月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
2月前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
2月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
54 1