⭕子串操作
在 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++、算法和编程的奥秘。祝您生活愉快,排便顺畅!