【C++庖丁解牛】实现string容器的增删查改 | string容器的基本接口使用

本文主要是介绍【C++庖丁解牛】实现string容器的增删查改 | string容器的基本接口使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


📙 作者简介 :RO-BERRY
📗 学习方向:致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识
📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持


请添加图片描述


目录

  • 前言
  • 📖push_back接口
  • 📖append接口
  • 📖operator+= (重点)
  • 📖replace接口
  • 📖find接口
  • 📖npos
  • 📖find + npos(重点)
  • 📖substr
  • 📖insert接口
  • 📖erase接口
  • 📖refind接口
  • 📖c_str接口
  • 📖find_first_of接口
  • 📖compare接口
  • 总结


前言

函数名称功能说明
push_back在字符串后尾插字符c
append在字符串后追加一个字符串
operator+= (重点)在字符串后追加字符串str
c_str(重点)返回C格式字符串
find + npos(重点)从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr在str中从pos位置开始,截取n个字符,然后将其返回

📖push_back接口

int main()
{string str;str.push_back(' ');   // 在str后插入空格str.append("hello");  // 在str后追加一个字符"hello"str += 'w';           // 在str后追加一个字符'w'   str += "xxx";          // 在str后追加一个字符串"xxx"cout << str << endl;cout << str.c_str() << endl;   // 以C语言的方式打印字符串return 0;
}

在这里插入图片描述


📖append接口

append()是一个成员函数,用于将字符串或字符序列添加到当前字符串的末尾。它有多种重载形式,可以接受不同类型的参数。

在这里插入图片描述
这里其实用第一个就已经足够了,其他的显的有些多余

  1. 传入一个字符串作为参数,它会将该字符串的内容添加到当前字符串的末尾。
int main()
{string s1("hello");s1.append("abcd");cout << s1 << endl;return 0;
}

在这里插入图片描述

  1. 如果传入一个字符数组作为参数,它会将该字符数组的内容添加到当前字符串的末尾。
string str = "Hello";
char arr[] = " World";
str.append(arr);
// 现在str的值为"Hello World"
  1. 如果传入一个字符和重复次数作为参数,它会将该字符重复指定次数后添加到当前字符串的末尾
string str = "Hello";
char ch = '!';
int repeatCount = 3;
str.append(repeatCount, ch);
// 现在str的值为"Hello!!!"

4.如果传入字符串的头和尾作为参数,它会将该字符添加到当前字符串的末尾

int main()
{string s1("hello");s1.append("abcd");cout << s1 << endl;//在s2后面加入s1string s2 = "xxxx";s2.append(s1.begin(), s1.end());cout << s2 << endl;return 0;
}

📖operator+= (重点)

int main()
{//最简便的方式string s1("hello");string s2 = "xxxx";s1 += '!';cout << s1 << endl;s1 += "world";cout << s1 << endl;s1 += s2;cout << s1 << endl;return 0;
}

在这里插入图片描述


📖replace接口

string容器的replace接口用于替换字符串中的一部分内容。它有多个重载形式,可以根据需要进行不同的替换操作。

  1. replace(pos, count, str):将从位置pos开始的count个字符替换为字符串str。
    示例:string str = “Hello, world!”;
    str.replace(7, 5, “CSDN”);
    替换后的字符串为:“Hello, CSDN!”
  1. replace(pos, count, str, pos2, count2):将从位置pos开始的count个字符替换为字符串str中从位置pos2开始的count2个字符。
    示例:string str = “Hello, world!”;
    string str2 = “CSDN”;
    str.replace(7, 5, str2, 0, 4);
    替换后的字符串为:“Hello, CSDN!”
  1. replace(iterator1, iterator2, str):将迭代器iterator1和iterator2之间的字符替换为字符串str。
    示例:string str = “Hello, world!”;
    string str2 = “CSDN”;
    str.replace(str.begin() + 7, str.begin() + 12, str2);
    替换后的字符串为:“Hello, CSDN!”
  1. replace(iterator1, iterator2, iterator3, iterator4):将迭代器iterator1和iterator2之间的字符替换为迭代器iterator3和iterator4之间的字符。
    示例:string str = “Hello, world!”;
    string str2 = “CSDN”;
    str.replace(str.begin() + 7, str.begin() + 12, str2.begin(), str2.end());
    替换后的字符串为:“Hello, CSDN!”

📖find接口

string容器的find接口用于在字符串中查找指定的子串,并返回其第一次出现的位置。该接口有多个重载形式,可以根据需要选择使用。

  1. find(const string& str, size_t pos = 0) const:
    在字符串中从指定位置pos开始查找子串str,并返回其第一次出现的位置。如果找不到,则返回string::npos。
  1. find(const char* s, size_t pos = 0) const:
    在字符串中从指定位置pos开始查找C风格字符串s,并返回其第一次出现的位置。如果找不到,则返回string::npos。
  1. find(char c, size_t pos = 0) const:
    在字符串中从指定位置pos开始查找字符c,并返回其第一次出现的位置。如果找不到,则返回string::npos。

其中,pos参数表示查找的起始位置,默认为0,即从字符串的开头开始查找。


📖npos

string::npos是C++中string类的一个静态成员变量,它表示一个无效的或者不存在的位置。在string类中,npos的值是一个特殊的常量,通常被用来表示字符串中某个字符或子串不存在的情况。

当我们在使用string类的成员函数进行查找操作时,如果没有找到指定的字符或子串,那么返回值就会是npos。这个值在不同的编译器中可能会有所不同,但通常它的值是-1或者一个非法的索引值。
使用npos可以方便地判断字符串中是否包含某个字符或子串。


📖find + npos(重点)

int main()
{string s1("hello world hello world");cout << s1 << endl;//将所有的空格替换成20%size_t pos = s1.find(' ');while (pos != string::npos){s1.replace(pos, 1, "%20"); //replace效率是特别低的最好不要用pos = s1.find(' ');}cout << s1 << endl;return 0;
}

在这里插入图片描述


📖substr

substr是一种字符串操作函数,用于从一个字符串中提取子字符串。它的语法如下:
string substr (size_t pos, size_t len) const;
其中,pos表示要提取的子字符串的起始位置,len表示要提取的子字符串的长度。返回值是一个新的字符串,包含了从原始字符串中提取的子字符串。

获取file的后缀

int main() 
{string file("string.cpp");size_t pos = file.rfind('.');string suffix(file.substr(pos, file.size() - pos)); //取后缀并拷贝构造suffixcout << suffix << endl;return 0;
}

在这里插入图片描述
取出url中的域名

int main() 
{string url("http://www.cplusplus.com/reference/string/string/find/");cout << url << endl;size_t start = url.find("://");if (start == string::npos){cout << "invalid url" << endl;return 1;}start += 3;size_t finish = url.find('/', start);string address = url.substr(start, finish - start);cout << address << endl;return 0;
}

在这里插入图片描述


📖insert接口

string容器的insert接口用于在指定位置插入字符或字符串。它有多个重载形式,具体取决于插入的内容和位置。

  1. insert(pos, str):在指定位置pos前插入字符串str。
    示例:str.insert(3, "hello") 将在索引为3的位置前插入字符串"hello"。

2. insert(pos, str, subpos, sublen):在指定位置pos前插入字符串str的子串,子串的起始位置为subpos,长度为sublen
示例:str.insert(5, "world", 2, 3) 将在索引为5的位置前插入字符串"wor"。

  1. insert(pos, n, ch):在指定位置pos前插入字符ch的副本,重复插入n次。
    示例:str.insert(2, 3, 'a') 将在索引为2的位置前插入3个字符’a’。

📖erase接口

string容器的erase接口用于删除指定位置的字符或者一段字符。它有两种重载形式:

erase(pos, count):删除从位置pos开始的count个字符。其中,pos是一个索引值,表示要删除的起始位置;count是要删除的字符数量。

erase(iterator first, iterator last):删除从迭代器first指向的字符开始,到迭代器last指向的字符之前的所有字符。其中,first和last是迭代器,表示要删除的字符范围。

需要注意的是,erase操作会改变原始字符串,删除指定位置的字符后,后面的字符会自动向前移动。


📖refind接口

与find()函数类似,但是从字符串的末尾开始查找子串

size_t refind(const string& str, size_t pos = 0) const;
其中,str是要查找的子串,pos是查找的起始位置,默认为0。该函数返回子串第一次出现的位置,如果找不到则返回string::npos。

使用示例:

#include <iostream>
#include <string>
using namespace std;int main() {string str = "Hello, world!";string subStr = "world";size_t pos = str.find(subStr);if (pos != string::npos) {cout << "子串 \"" << subStr << "\" 在字符串 \"" << str << "\" 中的位置是:" << pos << endl;}else {cout << "未找到子串 \"" << subStr << "\" 在字符串 \"" << str << "\" 中" << endl;}return 0;
}

在这里插入图片描述


📖c_str接口

c_str()是C++中的一个字符串成员函数,用于返回一个指向以null结尾的字符数组(C风格字符串)的指针。它通常用于将C++的std::string对象转换为C风格字符串。
使用c_str()函数可以方便地将std::string对象传递给需要C风格字符串作为参数的函数或接口。

例如,如果你有一个std::string对象str,你可以通过调用str.c_str()来获取一个指向以null结尾的字符数组的指针。

需要注意的是:c_str()返回的指针指向的字符数组是只读的,不能修改其中的内容。如果需要修改字符串内容,应该使用其他方法。

📖find_first_of接口

string容器的find_first_of()函数是用于在字符串中查找第一个与指定字符序列中的任何字符匹配的字符的位置。它的语法如下:

size_t find_first_of(const string& str, size_t pos = 0) const noexcept;

其中,str是要查找的字符序列,pos是开始查找的位置,默认为0。
该函数返回一个size_t类型的值,表示找到的字符的位置。如果未找到匹配的字符,则返回string::npos。
该函数会从字符串的pos位置开始逐个字符地与str中的字符进行匹配,直到找到第一个匹配的字符或者到达字符串的末尾。

将语句中的“aeiou”全部替换成“ * ”

#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_tint main()
{std::string str("Please, replace the vowels in this sentence by asterisks.");std::size_t found = str.find_first_of("aeiou");while (found != std::string::npos){str[found] = '*';found = str.find_first_of("aeiou", found + 1);  }std::cout << str << '\n';return 0;
}

在这里插入图片描述

📖compare接口

string容器的compare()函数是用于比较两个字符串的。它返回一个整数值,表示两个字符串的大小关系。
compare()函数有以下几种用法:

1. compare(str):将当前字符串与参数str进行比较。返回值为0表示两个字符串相等,返回值大于0表示当前字符串大于参数str,返回值小于0表示当前字符串小于参数str。
2. compare(pos, len, str):从当前字符串的位置pos开始,比较长度为len的子串与参数str进行比较。返回值的含义与上述相同。
3. compare(pos, len, str, subpos, sublen):从当前字符串的位置pos开始,比较长度为len的子串与参数str的子串(从subpos开始,长度为sublen)进行比较。返回值的含义与上述相同。

注意,compare()函数是区分大小写的,即大写字母和小写字母被认为是不同的字符。

#include <iostream>
#include <string>int main()
{std::string str1("green apple");std::string str2("red apple");if (str1.compare(str2) != 0)std::cout << str1 << " is not " << str2 << '\n';if (str1.compare(6, 5, "apple") == 0)std::cout << "still, " << str1 << " is an apple\n";if (str2.compare(str2.size() - 5, 5, "apple") == 0)std::cout << "and " << str2 << " is also an apple\n";if (str1.compare(6, 5, str2, 4, 5) == 0)std::cout << "therefore, both are apples\n";return 0;
}

在这里插入图片描述

总结

在这里只是着重进行了string容器的常用接口的介绍以及使用,更多的接口还需要去查阅,修行之路还很漫长,让我们共同努力

这篇关于【C++庖丁解牛】实现string容器的增删查改 | string容器的基本接口使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794085

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本