跳转到内容

C++ string 类

来自代码酷
Admin留言 | 贡献2025年4月29日 (二) 01:47的版本 用户输入处理

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

C++ String类是标准模板库(STL)中提供的动态字符串类型,用于替代C风格字符数组(`char[]`),提供更安全、灵活和高效的字符串操作功能。本节将详细介绍其核心特性、常用方法及实际应用。

概述[编辑 | 编辑源代码]

C++中的std::string类(定义在头文件<string>中)封装了字符序列,支持动态内存管理、丰富的成员函数和运算符重载。与C风格字符串相比,其主要优势包括:

  • 自动内存管理:无需手动分配/释放内存。
  • 安全性:避免缓冲区溢出风险。
  • 功能性:内置拼接、查找、替换等操作。

基本操作[编辑 | 编辑源代码]

声明与初始化[编辑 | 编辑源代码]

#include <string>  
#include <iostream>  

int main() {  
    std::string s1;               // 空字符串  
    std::string s2 = "Hello";     // 从字面量初始化  
    std::string s3("World");      // 构造函数初始化  
    std::string s4(s2);           // 拷贝构造  

    std::cout << s2 + " " + s3;   // 输出: Hello World  
    return 0;  
}

常用成员函数[编辑 | 编辑源代码]

方法 描述 示例
length() 返回字符串长度 s2.length() // 5
append() 追加内容 s2.append("!") // "Hello!"
find() 查找子串位置 s2.find("ell") // 1
substr() 提取子串 s2.substr(1, 3) // "ell"

实际应用案例[编辑 | 编辑源代码]

用户输入处理[编辑 | 编辑源代码]

#include <string>  
#include <iostream>  

int main() {  
    std::string username;  
    std::cout << "Enter your name: ";  
    std::getline(std::cin, username);  // 读取整行输入  

    if (!username.empty()) {  
        std::cout << "Welcome, " << username << "!\n";  
    } else {  
        std::cout << "Name cannot be empty.\n";  
    }  
    return 0;  
}

输入/输出示例:

Enter your name: Alice  
Welcome, Alice!  

字符串分割[编辑 | 编辑源代码]

使用findsubstr实现按分隔符分割字符串:

#include <vector>  
#include <string>  

std::vector<std::string> split(const std::string &s, char delimiter) {  
    std::vector<std::string> tokens;  
    size_t start = 0, end = s.find(delimiter);  
    while (end != std::string::npos) {  
        tokens.push_back(s.substr(start, end - start));  
        start = end + 1;  
        end = s.find(delimiter, start);  
    }  
    tokens.push_back(s.substr(start));  
    return tokens;  
}

高级特性[编辑 | 编辑源代码]

迭代器支持[编辑 | 编辑源代码]

std::string兼容STL迭代器,支持范围循环:

for (char c : s2) {  
    std::cout << c << " ";  // 输出: H e l l o  
}

性能优化[编辑 | 编辑源代码]

  • 预留空间:通过`reserve()`减少动态分配次数。
  • 移动语义:C++11后支持移动构造,提升大字符串传递效率。

graph LR A[创建字符串] --> B[操作: 拼接/查找] B --> C{是否需要扩容?} C -->|是| D[自动分配新内存] C -->|否| E[直接修改]

数学表示[编辑 | 编辑源代码]

字符串长度计算可表示为: L(s)=i=0n1{1如果 s[i] 是有效字符0否则

总结[编辑 | 编辑源代码]

std::string是C++中处理文本的核心工具,结合了易用性与高性能。建议初学者掌握其基本操作后,逐步探索高级特性如正则表达式(<regex>)和国际化支持(locale)。