C++ 学习之string容器

简介: C++ 学习之string容器

C++ string字符串构造函数

在C++中,标准库中的std::string类提供了多种构造函数,可以用于不同情况下对字符串进行初始化和构造。以下是std::string类常见的构造函数及其使用情况:

  1. 默认构造函数:
std::string str;
  1. 用于创建一个空字符串对象。
  2. 带参数的构造函数:
std::string str("Hello, World!");
  1. 用于通过字符串字面值或者C风格的字符串初始化字符串对象。
  2. 复制构造函数:
std::string str1("Hello");
std::string str2(str1);
  1. 用于通过现有的字符串对象创建一个新的字符串对象。
  2. 构造指定长度的字符串:
std::string str(5, 'A');
  1. 创建一个包含5个字符’A’的字符串对象。
  2. 使用迭代器区间进行构造:
std::string str1("Hello");
std::string str2(str1.begin(), str1.end());
  1. 通过迭代器区间构造字符串对象。
  2. 使用子串构造:
std::string str1("Hello, World!");
std::string str2 = str1.substr(0, 5);
  1. 通过取原字符串的子串构造新的字符串对象。
  2. 使用移动语义构造:
std::string str1("Hello");
std::string str2(std::move(str1));
  1. 使用移动构造函数将原字符串对象的资源所有权转移到新的字符串对象。

C++ string字符串赋值操作

在C++中,std::string类提供了多种赋值操作,可用于字符串的赋值、替换和连接等操作。以下是std::string类常见的赋值操作及其使用情况:

  1. 使用赋值运算符=
std::string str1 = "Hello";
std::string str2 = str1
  1. 将一个字符串对象的值赋给另一个字符串对象。
  2. 使用赋值函数assign()
std::string str;
str.assign("Hello");
  1. 将一个字符串的值赋给另一个字符串对象。
  2. 使用子串赋值函数substr()
std::string str1 = "Hello";
std::string str2 = str1.substr(0, 3);
  1. 将一个字符串的子串赋给另一个字符串对象。
  2. 使用+=操作符进行字符串连接:
std::string str = "Hello";
str += ", World!";
  1. 将一个字符串与另一个字符串进行连接操作。
  2. 使用append()函数进行字符串连接:
std::string str = "Hello";
str.append(", World!");
  1. 使用append()函数将一个字符串追加到另一个字符串之后。
  2. 使用insert()函数插入子串:
std::string str = "Hello world!";
str.insert(5, "beautiful ");
  1. 在指定位置插入子串到字符串中。
  2. 使用replace()函数替换子串:
std::string str = "Hello, Bob!";
str.replace(7, 3, "Alice");
  1. 将字符串中指定位置的子串替换为新的子串。

C++ string字符串拼接

在C++中,可以使用多种方法来拼接字符串(std::string)对象。以下是几种常见的拼接字符串的方法:

  1. 使用"+"运算符:
std::string str1 = "Hello";
std::string str2 = " World!";
std::string result = str1 + str2;
  1. 使用append()函数:
std::string str1 = "Hello";
std::string str2 = " World!";
str1.append(str2);
  1. 使用+=运算符:
std::string str1 = "Hello";
std::string str2 = " World!";
str1 += str2;
  1. 使用insert()函数插入子串:
std::string str1 = "Hello";
std::string str2 = " World!";
str1.insert(str1.length(), str2); 
  1. 使用replace()函数替换子串:
std::string str = "Hello!";
std::string replacement = " World!";
str.replace(str.length(), 0, replacement);

C++ string字符串查找和替换

在C++中,可以使用std::string类提供的函数来进行字符串的查找和替换操作。以下是几种常见的情况:

  1. 查找子串:
    使用find()函数或rfind()函数来查找字符串中第一次出现或最后一次出现指定子串的位置。如果找到,则返回子串第一个字符在原字符串中的索引;如果未找到,则返回std::string::npos
std::string str = "Hello, World!";
size_t pos = str.find("World");
if (pos != std::string::npos) {
    // 找到了
    // 处理逻辑...
} else {
    // 未找到
    // 处理逻辑...
}
  1. 替换子串:
    使用replace()函数来将原字符串中指定的子串替换为新的子串。
std::string str = "Hello, Bob!";
str.replace(7, 3, "Alice");
// 结果:Hello, Alice!
  1. 全局替换子串:
    可以利用循环结合find()函数和replace()函数,实现全局替换字符串中所有出现的指定子串。
std::string str = "Hello, Bob! Bob, hello!";
size_t pos = str.find("Bob");
while (pos != std::string::npos) {
    str.replace(pos, 3, "Alice");
    pos = str.find("Bob", pos + 1);
}
// 结果:Hello, Alice! Alice, hello!
  1. 字符串切片和部分替换:
    利用substr()函数、加号运算符和replace()函数,可以实现对字符串中特定部分的切片和替换。
std::string str = "Hello, World!";
std::string slice = str.substr(7, 5); // 获取子串 "World"
slice += " Alice"; // 拼接新的子串
str.replace(7, 5, slice); // 替换原字符串中的子串
// 结果:Hello, Alice!

C++ string字符串比较

在C++中,可以使用std::string类提供的函数来进行字符串比较操作。以下是几种常见的字符串比较方式:

  1. 使用compare()函数:
    compare()函数用于比较两个字符串的大小关系,返回值为整数,如果字符串相等则返回0,如果当前字符串小于目标字符串则返回负数,如果当前字符串大于目标字符串则返回正数。
std::string str1 = "hello";
std::string str2 = "world";
int result = str1.compare(str2);
if (result == 0) {
    // 字符串相等
} else if (result < 0) {
    // str1 小于 str2
} else {
    // str1 大于 str2
}
  1. 使用运算符:
    C++中的==!=<><=>=运算符可以直接用于字符串的比较,根据字符的编码进行比较。
std::string str1 = "hello";
std::string str2 = "world";
if (str1 == str2) {
    // 字符串相等
} else if (str1 < str2) {
    // str1 小于 str2
} else {
    // str1 大于 str2
}
  1. 使用std::lexicographical_compare()函数:
    lexicographical_compare()函数用于按照字典顺序比较两个字符串,可以自定义比较规则。
std::string str1 = "apple";
std::string str2 = "banana";
if (std::lexicographical_compare(str1.begin(), str1.end(), str2.begin(), str2.end())) {
    // str1 在字典序上小于 str2
} else {
    // str1 在字典序上大于等于 str2
}

C++ string字符串存取

在C++中,可以使用std::string类提供的函数进行字符串的存取操作。以下是几种常见的方法:

  1. 访问单个字符:
    可以使用下标运算符[]或者at()函数来获取字符串中特定位置的字符。
std::string str = "Hello, World!";
char firstChar = str[0]; // 获取第一个字符 'H'
char fifthChar = str.at(4); // 获取第五个字符 'o'
  1. 修改单个字符:
    可以通过下标运算符[]或者at()函数来修改字符串中特定位置的字符。
std::string str = "Hello, World!";
str[7] = 'E'; // 修改第八个字符为 'E'
str.at(8) = 'A'; // 修改第九个字符为 'A'
  1. 获取子串(字符串切片):
    使用substr()函数可以获取原字符串中特定范围的子串。
std::string str = "Hello, World!";
std::string sub = str.substr(7, 5); // 获取从第八个字符开始,长度为5的子串 "World"
  1. 设置子串:
    使用replace()函数可以在原字符串中指定位置替换特定长度的子串。
std::string str = "Hello, World!";
str.replace(7, 5, "Universe"); // 将从第八个字符开始,长度为5的子串 "World" 替换为 "Universe"
  1. 追加字符串:
    使用+=运算符或者append()函数可以将一个字符串追加到另一个字符串的末尾。
std::string str1 = "Hello, ";
std::string str2 = "World!";
str1 += str2; // 追加字符串到 str1 的末尾
// 或者
str1.append(str2); // 与上述相同效果

C++ string字符串插入和删除

在C++中,可以使用std::string类提供的函数进行字符串的插入和删除操作。以下是几种常见的方法:

  1. 插入字符串:
    使用insert()函数可以在字符串的指定位置插入另一个字符串。
std::string str = "Hello!";
str.insert(5, ", World"); // 在第六个字符后面插入字符串 ", World"
  1. 插入单个字符:
    使用insert()函数或者push_back()函数可以在字符串的指定位置插入单个字符。
std::string str = "Hello";
str.insert(5, 1, ','); // 在第六个字符后面插入逗号 ','
str.push_back('!'); // 在字符串末尾插入感叹号 '!'
  1. 删除子串:
    使用erase()函数可以删除字符串中指定位置的一段子串。
std::string str = "Hello, World!";
str.erase(5, 7); // 删除从第六个字符开始,长度为7的子串 ", World!"
  1. 删除单个字符:
    使用erase()函数或者pop_back()函数可以删除字符串中指定位置的单个字符。
std::string str = "Hello, World!";
str.erase(5, 1); // 删除第六个字符 ','
str.pop_back(); // 删除字符串末尾的一个字符 '!'
  1. 清空字符串:
    使用clear()函数可以清空整个字符串。
std::string str = "Hello, World!";
str.clear(); // 清空字符串

C++ string字符串子串获取

在C++中,可以使用std::string类提供的substr()函数来获取字符串的子串。substr()函数允许你从原始字符串中提取一个子串,并返回给你一个新的字符串。下面是一个示例:

#include <iostream>
#include <string>
int main() {
    std::string str = "Hello, World!";
    
    // 从第6个字符开始(索引为5),取长度为5的子串
    std::string sub1 = str.substr(5, 5); // 结果为 " World"
    
    // 从第0个字符开始(即第一个字符),取长度为5的子串
    std::string sub2 = str.substr(0, 5); // 结果为 "Hello"
    
    // 从第7个字符开始(索引为6),取到末尾的子串
    std::string sub3 = str.substr(6); // 结果为 "World!"
    
    std::cout << "Sub1: " << sub1 << std::endl;
    std::cout << "Sub2: " << sub2 << std::endl;
    std::cout << "Sub3: " << sub3 << std::endl;
    
    return 0;
}

在上面的示例中,substr()函数的第一个参数是起始位置(索引),第二个参数是要提取的子串长度(可选)。如果不提供第二个参数,则会默认提取从起始位置到字符串末尾的子串。

C++ string字符串其他方法

除了前面提到的字符串存取、插入、删除和子串获取之外,C++的std::string类还提供了许多其他有用的方法来处理字符串。以下是一些常用的字符串操作方法:

  1. 查找子串:
    使用find()函数可以在字符串中查找指定子串第一次出现的位置。
std::string str = "Hello, World!";
size_t found = str.find("World"); // 查找子串 "World"
if (found != std::string::npos) {
    std::cout << "Found at index: " << found << std::endl;
} else {
    std::cout << "Not found" << std::endl;
}
  1. 替换子串:
    使用replace()函数可以将字符串中指定范围的子串替换为新的字符串。
std::string str = "Hello, World!";
str.replace(7, 5, "Universe"); // 将子串 "World" 替换为 "Universe
  1. 大小写转换:
    使用toupper()tolower()函数可以将字符串中的字母字符转换为大写或小写。
std::string str = "Hello, World!";
for (auto& c : str) {
    c = std::toupper(c); // 将所有字符转换为大写
    // 或者 c = std::tolower(c); // 将所有字符转换为小写
}
  1. 比较字符串:
    使用compare()函数可以比较两个字符串是否相等,支持按字典顺序进行比较。
std::string str1 = "Hello";
std::string str2 = "hello";
if (str1.compare(str2) == 0) {
    std::cout << "Two strings are equal" << std::endl;
} else {
    std::cout << "Two strings are not equal" << std::endl;
}
  1. 转换为C风格字符串:
    使用c_str()函数可以将std::string类型转换为以\0结尾的C风格字符串。
std::string str = "Hello";
const char* cstr = str.c_str();

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

相关文章
|
10天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
31 4
2023/11/10学习记录-C/C++对称分组加密DES
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
1月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
35 0
|
2月前
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
66 2
|
3月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
本文介绍了Twaver HTML5中的页管理容器(TabBox)和选中模型(SelectionModel)。文章解释了如何使用TabBox来管理Tab页,并通过示例代码展示了SelectionModel的多种功能,包括追加选中元素、设置选中元素、选中所有元素、移除元素选中状态、清除所有选中状态等。此外,还介绍了如何监听选中状态的变化事件以及如何设置不同的选中模式,如多选、单选和不可选。
40 2
Twaver-HTML5基础学习(23)页管理容器(TabBox)、选中模型(SelectionModel)
|
2月前
|
Kubernetes Linux 持续交付
docker容器学习
【10月更文挑战第1天】
46 1
|
2月前
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
71 5
|
2月前
|
Java 编译器 C++
c++学习,和友元函数
本文讨论了C++中的友元函数、继承规则、运算符重载以及内存管理的重要性,并提到了指针在C++中的强大功能和使用时需要注意的问题。
30 1
|
2月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
83 2
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
148 0

热门文章

最新文章