走进C++的世界,也意味着我们对编程世界的认知达到另一个维度,如果你学习过C语言,那你绝对会有不一般的收获,感受到C++所带来的码云风暴~
---------------------------------------begin---------------------------------------
什么是string:
在C++编程中,字符串(String)是一种非常基本且强大的数据类型,用于存储和操作文本数据
。与C语言中的字符数组相比,C++标准库中的std::string
类提供了更为丰富和便捷的功能。
string的概念:
string
是计算机科学中一种基本的数据类型,用于表示由字符组成的序列。它在不同的编程语言中有不同的实现方式,但核心功能相似,包括存储、操作和处理字符串。- 在C++中,
std::string
是标准库中的一个类,用于高效地管理字符串数据。它通过动态内存分配来存储字符,并提供了丰富的成员函数来操作字符串。
string基础:
1.1 引入头文件
要使用std::string
,首先需要包含头文件<string>
:
1.2 创建和初始化
可以通过多种方式创建和初始化std::string
对象:
1.3 基本操作
- 长度获取:
str.length()
或str.size()
返回字符串的长度。 - 拼接:
str += " more text";
或使用str.append(" more text");
。 - 访问字符:
str[index]
或str.at(index)
(at
方法在越界时会抛出异常)。 - 子串:
str.substr(pos, len)
返回从pos
开始长度为len
的子串。
在前面我们讲解过C++的类和对象中的构造函数,析构函数在string中同样适用哦~
- 构造函数:
string()
:默认构造函数,创建一个空字符串。string(const char* str)
:使用C风格字符串构造string
对象。string(const string& s)
:拷贝构造函数,用于复制另一个string
对象。string(size_t n, char c)
:用指定字符重复构造字符串。
- 析构函数:
\~string()
负责释放动态分配的内存,确保资源管理的正确性。
string
的成员变量与内部实现:
string
类通常包含以下成员变量:_str
:指向动态分配的字符数组的指针。_size
:存储字符串的实际长度。_capacity
:存储分配空间的大小。
- 内部实现上,
string
底层通过边长数组的方式存储字符串,并使用指针管理内存。
访问与遍历
- 使用
[]
运算符访问单个字符。 - 使用迭代器遍历字符串内容,例如:
- 注意:迭代器访问时需防止越界!!!
2.1 查找和替换
- 查找:
str.find("substring")
返回子串第一次出现的位置,若未找到则返回std::string::npos
。 - 替换:
str.replace(pos, len, "new_substring")
从pos
开始替换长度为len
的部分为新的子串。
2.2 修改字符串
- 插入:
str.insert(pos, "inserted_text")
在pos
位置插入文本。 - 删除:
str.erase(pos, len)
从pos
开始删除长度为len
的字符。
2.3 转换
- C风格字符串转换:
str.c_str()
返回一个指向以null结尾的字符数组的指针,可以与需要C风格字符串的函数兼容。 - 数字转换:虽然
std::string
本身不提供直接的数字到字符串的转换,但可以使用std::to_string
函数(需要包含<string>
和<cstdlib>
或<cmath>
头文件)。
高级应用:
3.1 字符串流
std::stringstream
类允许在字符串和流之间进行转换,非常适合于解析和构建复杂的字符串数据:
#include <sstream>
std::stringstream ss;
ss << "Number: " << 123 << ", Text: Hello";
std::string result;
ss >> result; // 只读取到第一个空格前的部分,即"Number:"
为了读取整个流,可以使用循环或特定的分隔符处理。
3.2 字符串哈希
在某些应用场景下,需要对字符串进行哈希处理。虽然C++标准库没有直接提供字符串哈希函数,
但可以通过自定义哈希函数来实现:
#include <functional> // for std::hashstd::hash<std::string> hash_fn;
size_t hash_value = hash_fn("example string");
3.3 字符串分割
标准库没有直接提供字符串分割函数,但可以通过组合使用std::string
的成员函数和算法来实现:
#include <vector>
#include <algorithm>
#include <cctype>std::vector<std::string> split(const std::string& s, char delimiter) {std::vector<std::string> tokens;std::string token;for (char c : s) {if (c == delimiter) {if (!token.empty()) {tokens.push_back(token);token.clear();}} else {token += c;}}if (!token.empty()) {tokens.push_back(token);}return tokens;
}
string的用法还有很多,需要我们慢慢学习并且用上哦~