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();

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

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

相关文章
|
2天前
|
安全 Java 容器
第一篇:并发容器学习开篇介绍
第一篇:并发容器学习开篇介绍
11 4
|
3天前
|
C++
C++】string类的使用③(修改器Modifiers)
这篇博客探讨了C++ STL中`string`类的修改器和非成员函数重载。文章介绍了`operator+=`用于在字符串末尾追加内容,并展示了不同重载形式。`append`函数提供了更多追加选项,包括子串、字符数组、单个字符等。`push_back`和`pop_back`分别用于在末尾添加和移除一个字符。`assign`用于替换字符串内容,而`insert`允许在任意位置插入字符串或字符。最后,`erase`函数用于删除字符串中的部分内容。每个函数都配以代码示例和说明。
|
3天前
|
C++
C++基础知识(四:类的学习)
类指的就是对同一类对象,把所有的属性都封装起来,你也可以把类看成一个高级版的结构体。
|
3天前
|
算法 C++ 容器
|
13天前
|
Java UED
Java中String强转int:一种常见的错误和解决方法
在Java中将非数字字符串转换为整数会导致`NumberFormatException`。要解决这个问题,可以使用`try-catch`捕获异常,正则表达式验证数字格式,或利用异常信息提供错误提示。例如,`Integer.parseInt()`会因遇到非数字字符如`&quot;123abc&quot;`而抛出异常,但通过异常处理或正则`\\d+`可确保安全转换。记得在编程时避免直接强转,以防止程序异常中断。
|
4天前
|
安全 Java
Java基础之StringBuffer
【7月更文挑战第1天】 Java中的`StringBuffer`是线程安全的字符串操作类,适合多线程环境,而`StringBuilder`非线程安全,速度更快,适用于单线程。两者提供`append()`、`insert()`、`delete()`等方法修改字符串,避免了频繁创建新对象的性能问题。在不需要线程安全时,推荐使用`StringBuilder`以提高效率。
9 1
|
5天前
|
安全 Java 索引
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
带你快速掌握Java中的String类和StringBuffer类(详解常用方法 | 区别 )
|
12天前
|
Java 数据处理 Apache
探讨Java中判断String类型为空和null的方法
探讨Java中判断String类型为空和null的方法
13 1