目录
在C++中,std::string
是标准库提供的字符串类。它属于 <string>
头文件,并为处理字符串提供了一套丰富的功能和方法。std::string
是一个动态数组类,它能够自动调整大小,提供了许多便利的成员函数用于字符串的操作和处理。下面是string类的常用操作:
动态大小: std::string
类能够自动调整大小,不需要手动管理内存,这使得字符串的使用更为方便。
成员函数: std::string
提供了丰富的成员函数,包括字符串的连接、截取、查找、替换、比较等操作。
访问字符: 通过索引、迭代器等方式可以访问和修改字符串中的字符。
输入输出: 可以使用流操作符 <<
和 >>
进行字符串的输入和输出。
构造函数: std::string
支持多种构造函数,包括默认构造函数、接受 C 风格字符串的构造函数、拷贝构造函数等。
常用算法: 提供了一些常用的算法,比如字符串查找、替换等。
内存管理: std::string
负责管理字符串的内存,避免了手动内存管理的麻烦。
std::string()
std::string(const char* s)
std::string(const std::string& str)
operator=
, assign
代码实例:
#include <iostream>
#include <string>
using namespace std;
int main() {
// 默认构造函数
std::string str1;
// 带字符串参数的构造函数
std::string str2 = "Hello, World!";
// 拷贝构造函数
std::string str3 = str2;
// 赋值操作
std::string str4;
str4 = "World, Hello!";
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;
std::cout << str3 << std::endl;
std::cout << str4 << std::endl;
return 0;
}
输出:
length
方法: 返回字符串的长度size
方法: 返回字符串的大小(长度)代码实例:
#include <iostream>
#include <string>
int main() {
std::string myString = "Hello, World!";
// length 方法:返回字符串的长度
std::cout << "Length: " << myString.length() << std::endl;
// size 方法:返回字符串的大小(长度)
std::cout << "Size: " << myString.size() << std::endl;
// capacity 方法:返回空间总大小
std::cout << "Capacity: " << myString.capacity() << std::endl;
// empty 方法:检测字符串是否为空串
std::cout << "Is empty? " << (myString.empty() ? "Yes" : "No") << std::endl;
// clear 方法:清空有效字符
myString.clear();
std::cout << "After clear: " << myString << std::endl;
// reverse 方法:为字符串预留空间
myString.reserve(20);
std::cout << "After reserving space: " << myString << std::endl;
// resize 方法:将有效字符的个数修改为 n 个,多出的空间用字符 'X' 填充
myString.resize(10, 'X');
std::cout << "After resizing: " << myString << std::endl;
return 0;
}
输出:
?
代码实例:
#include <iostream>
#include <string>
int main() {
const std::string myString = "Hello, World!";
// operator[]:返回 pos 位置的字符,const string 类对象调用
char character = myString[7];
std::cout << "Character at position 7: " << character << std::endl;
// begin + end:begin 获取第一个字符的迭代器 + end 获取最后一个字符下一个位置的迭代器
std::cout << "Using begin() and end() to iterate:" << std::endl;
for (auto it = myString.begin(); it != myString.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// rbegin + rend:rbegin 获取最后一个字符的迭代器 + end 获取第一个字符前一个位置的迭代器
std::cout << "Using rbegin() and rend() to iterate in reverse:" << std::endl;
for (auto it = myString.rbegin(); it != myString.rend(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 范围 for 循环:C++11 支持更简洁的范围 for 的新遍历方式
std::cout << "Using range-based for loop:" << std::endl;
for (char c : myString) {
std::cout << c << " ";
}
std::cout << std::endl;
return 0;
}
输出:
?
???????代码实例:
#include <iostream>
#include <string>
int main() {
std::string myString = "Hello, ";
// push_back:在字符串后尾插字符 'C'
myString.push_back('C');
std::cout << "After push_back: " << myString << std::endl;
// append:在字符串后追加一个字符串
myString.append("World!");
std::cout << "After append: " << myString << std::endl;
// operator +=:在字符串后追加字符串 " Welcome!"
myString += " Welcome!";
std::cout << "After operator +=: " << myString << std::endl;
// c_str:返回 C 格式字符串
const char* cStr = myString.c_str();
std::cout << "C-style string: " << cStr << std::endl;
// find + npos:从字符串位置 7 开始往后找字符 'o',返回该字符在字符串中的位置
size_t pos = myString.find('o', 7);
if (pos != std::string::npos) {
std::cout << "Found 'o' at position: " << pos << std::endl;
} else {
std::cout << "'o' not found." << std::endl;
}
// rfind:从字符串位置 7 开始往前找字符 'o',返回该字符在字符串中的位置
size_t rpos = myString.rfind('o', 7);
if (rpos != std::string::npos) {
std::cout << "Found last 'o' at position: " << rpos << std::endl;
} else {
std::cout << "Last 'o' not found." << std::endl;
}
// substr:在字符串中从位置 7 开始截取 5 个字符,然后将其返回
std::string substr = myString.substr(7, 5);
std::cout << "Substring: " << substr << std::endl;
return 0;
}
?输出:
代码实例:
#include <iostream>
#include <string>
int main() {
// operator+:传值返回,导致深拷贝效率低(少用)
std::string str1 = "Hello, ";
std::string str2 = "World!";
std::string result = str1 + str2; // 使用 operator+ 进行字符串连接
std::cout << "Concatenated string: " << result << std::endl;
// operator>>:输入运算符重载
std::string inputString;
std::cout << "Enter a string: ";
std::cin >> inputString;
std::cout << "You entered: " << inputString << std::endl;
// operator<<:输出运算符重载
std::string outputString = "Output this string!";
std::cout << "Output using operator<<: " << outputString << std::endl;
// getline:获取一行字符串
std::string line;
std::cout << "Enter a line of text: ";
std::getline(std::cin, line);
std::cout << "You entered: " << line << std::endl;
// relational operators:大小比较
std::string str3 = "apple";
std::string str4 = "banana";
if (str3 == str4) {
std::cout << "Strings are equal." << std::endl;
} else if (str3 < str4) {
std::cout << "str3 is less than str4." << std::endl;
} else {
std::cout << "str3 is greater than str4." << std::endl;
}
return 0;
}
输出:
?
以上只是对string类的初步认识,想要继续深入了解它还需要经过大量的练习以及string类的自我实现,理解了它的底层原理才能更好地运用它,后续我也会继续推出有关string类的自我实现的博客,请期待一波~~