讲师中心 微信公众号
AI工具推荐 视频效率加速

C++字符串处理 string类常用操作方法

胖雪吖_7130

胖雪吖_7130

发布时间:2025-08-30 08:09:01

|

641人浏览过

|

来源于php中文网

原创

C++中string类提供构造、赋值、访问、修改、查找、比较等丰富操作,支持自动内存管理,相比C风格字符串更安全高效,通过reserve预分配内存可优化拼接性能,使用at()可避免越界访问,需注意空指针和迭代器失效等问题。

c++字符串处理 string类常用操作方法

C++中

string
类提供了丰富的功能来处理字符串,理解并熟练运用这些方法是高效进行C++字符串操作的关键。下面将详细介绍
string
类的常用操作方法。

解决方案

C++的

string
类封装了许多字符串操作,包括构造、修改、查找、比较等。掌握这些操作能够更有效地处理字符串数据。

  • 构造函数:

    • string()
      :默认构造函数,创建一个空字符串。
    • string(const string& str)
      :拷贝构造函数,用另一个
      string
      对象初始化。
    • string(const char* s)
      :用C风格字符串初始化。
    • string(size_t n, char c)
      :用n个字符c初始化。
  • 赋值:

    立即学习“C++免费学习笔记(深入)”;

    • string& operator=(const string& str)
      :将一个
      string
      对象赋值给另一个。
    • string& operator=(const char* s)
      :将C风格字符串赋值给
      string
      对象。
    • string& operator=(char c)
      :将单个字符赋值给
      string
      对象。
    • string& assign(const string& str)
      :赋值,功能与
      =
      类似,但更灵活。
    • string& assign(const char* s)
      :赋值,功能与
      =
      类似,但更灵活。
    • string& assign(size_t n, char c)
      :赋值,用n个字符c赋值。
  • 访问:

    • char& operator[](size_t pos)
      :访问指定位置的字符,不进行越界检查。
    • char& at(size_t pos)
      :访问指定位置的字符,进行越界检查,越界会抛出
      std::out_of_range
      异常。
    • char& front()
      :访问第一个字符。
    • char& back()
      :访问最后一个字符。
  • 修改:

    • string& append(const string& str)
      :在字符串末尾追加另一个字符串。
    • string& append(const char* s)
      :在字符串末尾追加C风格字符串。
    • string& append(size_t n, char c)
      :在字符串末尾追加n个字符c。
    • string& push_back(char c)
      :在字符串末尾追加一个字符。
    • string& insert(size_t pos, const string& str)
      :在指定位置插入另一个字符串。
    • string& insert(size_t pos, const char* s)
      :在指定位置插入C风格字符串。
    • string& insert(size_t pos, size_t n, char c)
      :在指定位置插入n个字符c。
    • string& erase(size_t pos = 0, size_t n = npos)
      :删除从指定位置开始的n个字符。
    • string& replace(size_t pos, size_t n, const string& str)
      :替换从指定位置开始的n个字符为另一个字符串。
    • string& replace(size_t pos, size_t n, const char* s)
      :替换从指定位置开始的n个字符为C风格字符串。
    • void clear()
      :清空字符串。
    • string& resize(size_t n)
      :改变字符串长度为n,如果n大于当前长度,则用空格填充。
    • string& resize(size_t n, char c)
      :改变字符串长度为n,如果n大于当前长度,则用字符c填充。
  • 查找:

    C++14
    C++14

    C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

    下载
    • size_t find(const string& str, size_t pos = 0) const
      :从指定位置开始查找子字符串,返回第一次出现的位置,找不到返回
      string::npos
      。
    • size_t find(const char* s, size_t pos = 0) const
      :从指定位置开始查找C风格字符串,返回第一次出现的位置,找不到返回
      string::npos
      。
    • size_t find(char c, size_t pos = 0) const
      :从指定位置开始查找字符,返回第一次出现的位置,找不到返回
      string::npos
      。
    • size_t rfind(const string& str, size_t pos = npos) const
      :从指定位置开始反向查找子字符串,返回第一次出现的位置,找不到返回
      string::npos
      。
    • size_t rfind(const char* s, size_t pos = npos) const
      :从指定位置开始反向查找C风格字符串,返回第一次出现的位置,找不到返回
      string::npos
      。
    • size_t rfind(char c, size_t pos = npos) const
      :从指定位置开始反向查找字符,返回第一次出现的位置,找不到返回
      string::npos
      。
    • size_t find_first_of(const string& str, size_t pos = 0) const
      :从指定位置开始查找第一个在子字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_first_of(const char* s, size_t pos = 0) const
      :从指定位置开始查找第一个在C风格字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_first_not_of(const string& str, size_t pos = 0) const
      :从指定位置开始查找第一个不在子字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_first_not_of(const char* s, size_t pos = 0) const
      :从指定位置开始查找第一个不在C风格字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_last_of(const string& str, size_t pos = npos) const
      :从指定位置开始反向查找第一个在子字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_last_of(const char* s, size_t pos = npos) const
      :从指定位置开始反向查找第一个在C风格字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_last_not_of(const string& str, size_t pos = npos) const
      :从指定位置开始反向查找第一个不在子字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
    • size_t find_last_not_of(const char* s, size_t pos = npos) const
      :从指定位置开始反向查找第一个不在C风格字符串中出现的字符,返回位置,找不到返回
      string::npos
      。
  • 比较:

    • int compare(const string& str) const
      :与另一个字符串比较。
    • int compare(const char* s) const
      :与C风格字符串比较。
    • bool operator==(const string& str) const
      :判断是否相等。
    • bool operator!=(const string& str) const
      :判断是否不相等。
    • bool operator<(const string& str) const
      :判断是否小于。
    • bool operator>(const string& str) const
      :判断是否大于。
    • bool operator<=(const string& str) const
      :判断是否小于等于。
    • bool operator>=(const string& str) const
      :判断是否大于等于。
  • 子串:

    • string substr(size_t pos = 0, size_t n = npos) const
      :返回从指定位置开始的n个字符组成的子字符串。
  • 其他:

    • size_t size() const
      :返回字符串长度。
    • size_t length() const
      :返回字符串长度,与
      size()
      功能相同。
    • size_t capacity() const
      :返回字符串的容量,即分配的内存大小。
    • bool empty() const
      :判断字符串是否为空。
    • const char* c_str() const
      :返回C风格字符串。
    • const char* data() const
      :返回指向字符串数据的指针,与
      c_str()
      类似,但不保证以空字符结尾。

如何高效地使用C++ string类进行字符串拼接?

使用

string
类进行字符串拼接时,选择合适的方法可以显著提高性能。多次使用
+=
或
append
进行拼接可能会导致频繁的内存重新分配。一个更高效的方法是预先计算好最终字符串的长度,然后使用
reserve
方法预留足够的内存空间,再进行拼接。 此外,如果需要拼接大量的字符串,可以考虑使用
stringstream
,它在某些情况下可能比直接使用
string
类更高效。

#include <iostream>
#include <string>
#include <sstream>

int main() {
    std::string str1 = "Hello";
    std::string str2 = "World";
    std::string result;

    // 预留空间,避免多次分配内存
    result.reserve(str1.length() + str2.length() + 1);
    result += str1;
    result += " ";
    result += str2;

    std::cout << result << std::endl;

    // 使用 stringstream
    std::stringstream ss;
    ss << str1 << " " << str2;
    std::string result2 = ss.str();

    std::cout << result2 << std::endl;

    return 0;
}

C++ string类与C风格字符串char*有什么区别和联系?

string
类是C++标准库提供的字符串类,它封装了字符串的操作,具有自动内存管理的功能,可以动态地增长或缩小。而C风格字符串
char*
本质上是一个字符数组,需要手动管理内存,容易出现内存泄漏或缓冲区溢出等问题。

区别:

  • 内存管理:
    string
    类自动管理内存,
    char*
    需要手动管理。
  • 安全性:
    string
    类更安全,不容易出现缓冲区溢出。
  • 功能:
    string
    类提供了丰富的字符串操作方法。

联系:

  • string
    类可以转换为C风格字符串,通过
    c_str()
    方法。
  • string
    类可以用C风格字符串初始化。
  • 在某些情况下,需要将
    string
    对象转换为
    char*
    才能与某些C风格的API兼容。

如何避免C++ string类在使用过程中常见的错误?

在使用

string
类时,需要注意以下几点以避免常见的错误:

  1. 越界访问: 使用
    operator[]
    访问字符串时,不会进行越界检查,如果访问越界,会导致未定义行为。应该使用
    at()
    方法,它会进行越界检查,并在越界时抛出异常。
  2. 空指针: 在使用C风格字符串初始化
    string
    对象时,要确保C风格字符串不是空指针,否则会导致程序崩溃。
  3. 内存泄漏: 虽然
    string
    类自动管理内存,但在某些情况下,如果将
    string
    对象赋值给
    char*
    指针,并且没有正确地管理
    char*
    指针指向的内存,仍然可能导致内存泄漏。
  4. 修改const string: 不要尝试修改
    const string
    对象,否则会导致编译错误或运行时错误。
  5. 迭代器失效: 在使用迭代器遍历
    string
    对象时,如果对字符串进行了修改操作,可能会导致迭代器失效。
#include <iostream>
#include <string>
#include <stdexcept>

int main() {
    std::string str = "Hello";

    // 避免越界访问
    try {
        char c = str.at(10); // 抛出 std::out_of_range 异常
        std::cout << c << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "Out of range error: " << e.what() << std::endl;
    }

    // 避免空指针
    const char* cstr = nullptr;
    // std::string str2(cstr); // 避免这样使用,会导致崩溃

    return 0;
}

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5979

2023.08.02

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2118

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1678

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2544

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

5984

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

5389

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7094

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

10094

2024.04.29

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

40

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go语言教程-全程干货无废话
Go语言教程-全程干货无废话

共100课时 | 17.8万人学习

Redis中文开发手册
Redis中文开发手册

共0课时 | 0人学习

尚学堂ios初级视频教程
尚学堂ios初级视频教程

共77课时 | 21.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn