【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类允许在字符串和流之间进行转换,非常适合于解析和构建复杂的字符串数据:

cpp 复制代码
#include <sstream>
std::stringstream ss;
ss << "Number: " << 123 << ", Text: Hello";
std::string result;
ss >> result; // 只读取到第一个空格前的部分,即"Number:"

为了读取整个流,可以使用循环或特定的分隔符处理。

3.2 字符串哈希

在某些应用场景下,需要对字符串进行哈希处理。虽然C++标准库没有直接提供字符串哈希函数,

但可以通过自定义哈希函数来实现:

cpp 复制代码
#include <functional> // for std::hash

std::hash<std::string> hash_fn;
size_t hash_value = hash_fn("example string");
3.3 字符串分割

标准库没有直接提供字符串分割函数,但可以通过组合使用std::string的成员函数和算法来实现:

cpp 复制代码
#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----------------------------------------

相关推荐
仟濹2 分钟前
【前缀和与差分 二分搜索 C/C++】洛谷 P1083 借教室
c语言·c++·算法
心态与习惯17 分钟前
c++ 调用 gurobi 库,cmake,mac
c++·macos·cmake·第三方库·gurobi
Zԅ(¯ㅂ¯ԅ)24 分钟前
计算机图形学交互式技术实验(鼠标、拾取操作和菜单)——绘制可用鼠标进行修改颜色的五角星和矩形
c++·visual studio
John_ToDebug29 分钟前
chrome源码中非常巧妙、复杂或者不常见的技术手段
c++·chrome·性能优化
caoruipeng2 小时前
Windows编程----结束进程
c++·windows·子进程
请来次降维打击!!!2 小时前
算法优选系列(1.双指针_下)
c++·算法
熊峰峰3 小时前
数据结构第六节:二叉搜索树(BST)的基本操作与实现
开发语言·数据结构·c++·算法
John_ToDebug3 小时前
Chrome 浏览器性能优化全景解析
c++·chrome·性能优化
Zԅ(¯ㅂ¯ԅ)3 小时前
OpenGL中绘制图形元素的实现(使用visual studio(C++)绘制一个矩形)
c++·visual studio
维齐洛波奇特利(male)3 小时前
(语法笔记 分析题解语法 二分 “unordered_map与vector<pair<>>“ 快速数组)leetocde 1146
前端·c++·算法