欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 【C++探索之路】STL---string

【C++探索之路】STL---string

2025/4/19 16:35:08 来源:https://blog.csdn.net/2401_86275172/article/details/145359368  浏览:    关键词:【C++探索之路】STL---string

                               

走进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的用法还有很多,需要我们慢慢学习并且用上哦~

----------------------------------------end----------------------------------------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词