C++字符串处理中string类有哪些常用操作方法

来源:3D模型作者:森沢头衔:网络博主
导读:本期聚焦于小伙伴创作的《C++字符串处理中string类有哪些常用操作方法》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++字符串处理中string类有哪些常用操作方法》有用,将其分享出去将是对创作者最好的鼓励。

C++的string类属于标准库中的std命名空间,封装了字符串的操作逻辑,不需要开发者手动管理内存,避免了传统C风格字符串容易出现的内存溢出、越界访问等问题。它提供了丰富的成员函数,覆盖大部分常见字符串处理场景,是C++开发中最常用的字符串处理工具之一。

string类的初始化方法

string类支持多种初始化方式,开发者可以根据实际需求选择合适的初始化形式。

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 默认初始化,为空字符串
    string s1;
    // 用C风格字符串初始化
    string s2 = "hello";
    // 用另一个string对象初始化
    string s3 = s2;
    // 初始化为指定数量的相同字符
    string s4(5, 'a');
    // 用部分C风格字符串初始化,取前3个字符
    string s5("world", 3);
    cout << "s1: " << s1 << endl;
    cout << "s2: " << s2 << endl;
    cout << "s3: " << s3 << endl;
    cout << "s4: " << s4 << endl;
    cout << "s5: " << s5 << endl;
    return 0;
}

常用字符串拼接操作

string类支持多种方式拼接字符串,比C风格字符串的拼接更简洁安全。

使用+运算符拼接

可以直接用+运算符拼接两个string对象,或者string对象和C风格字符串、字符。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "hello";
    string s2 = "world";
    // 拼接两个string对象
    string s3 = s1 + s2;
    // 拼接string和C风格字符串
    string s4 = s1 + " ";
    // 拼接string和字符
    string s5 = s4 + '!';
    cout << s3 << endl; // 输出helloworld
    cout << s5 << endl; // 输出hello !
    return 0;
}

使用append成员函数拼接

append函数可以在原字符串末尾追加内容,支持追加指定长度的字符串。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "hello";
    // 追加C风格字符串
    s.append(" world");
    // 追加另一个string对象
    string suffix = "!!!";
    s.append(suffix);
    // 追加指定长度的C风格字符串,取前3个字符
    s.append("abcdef", 3);
    cout << s << endl; // 输出hello world!!!abc
    return 0;
}

字符串查找操作

string类提供了多个查找函数,返回查找结果的索引位置,如果未找到则返回string::npos。

函数名功能说明
find(str)查找str第一次出现的位置
rfind(str)查找str最后一次出现的位置
find_first_of(str)查找str中任意字符第一次出现的位置
find_last_of(str)查找str中任意字符最后一次出现的位置
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "hello world hello";
    // 查找第一次出现hello的位置
    size_t pos1 = s.find("hello");
    // 查找最后一次出现hello的位置
    size_t pos2 = s.rfind("hello");
    // 查找第一个元音字母的位置
    size_t pos3 = s.find_first_of("aeiou");
    // 判断是否找到结果
    if (pos1 != string::npos) {
        cout << "第一次找到hello的位置:" << pos1 << endl;
    }
    if (pos2 != string::npos) {
        cout << "最后一次找到hello的位置:" << pos2 << endl;
    }
    if (pos3 != string::npos) {
        cout << "第一个元音字母的位置:" << pos3 << endl;
    }
    return 0;
}

字符串截取与修改操作

substr截取子串

substr函数可以从指定位置开始截取指定长度的子字符串,第一个参数是起始索引,第二个参数是截取长度,如果不传第二个参数则截取到字符串末尾。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "hello world";
    // 从索引0开始截取5个字符
    string sub1 = s.substr(0, 5);
    // 从索引6开始截取到末尾
    string sub2 = s.substr(6);
    cout << "sub1: " << sub1 << endl; // 输出hello
    cout << "sub2: " << sub2 << endl; // 输出world
    return 0;
}

erase删除字符

erase函数可以删除指定位置、指定长度的字符,也可以删除指定迭代器范围的字符。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "hello world";
    // 删除从索引5开始的1个字符(空格)
    s.erase(5, 1);
    cout << "删除后:" << s << endl; // 输出helloworld
    // 删除最后一个字符
    s.erase(s.size() - 1);
    cout << "再删除后:" << s << endl; // 输出helloworl
    return 0;
}

replace替换字符

replace函数可以替换指定位置、指定长度的字符为新的内容。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "hello world";
    // 替换从索引6开始的5个字符为cpp
    s.replace(6, 5, "cpp");
    cout << "替换后:" << s << endl; // 输出hello cpp
    return 0;
}

字符串比较操作

string类重载了==、!=、<、>等比较运算符,也提供了compare成员函数进行更灵活的字符串比较。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "apple";
    string s2 = "banana";
    // 使用比较运算符
    if (s1 < s2) {
        cout << s1 << " 小于 " << s2 << endl;
    }
    // 使用compare函数,返回0表示相等,小于0表示当前字符串更小,大于0表示当前字符串更大
    int ret = s1.compare(s2);
    if (ret < 0) {
        cout << "compare结果:" << s1 << " 小于 " << s2 << endl;
    }
    return 0;
}

其他常用操作

  • size()和length():返回字符串的长度,两个函数功能完全一致。
  • empty():判断字符串是否为空,为空返回true,否则返回false。
  • c_str():返回对应的C风格字符串指针,方便和需要C风格字符串的接口对接。
  • clear():清空字符串内容。
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "test";
    cout << "长度:" << s.size() << endl; // 输出4
    cout << "是否为空:" << (s.empty() ? "是" : "否") << endl; // 输出否
    // 获取C风格字符串
    const char* c_s = s.c_str();
    cout << "C风格字符串:" << c_s << endl;
    s.clear();
    cout << "清空后是否为空:" << (s.empty() ? "是" : "否") << endl; // 输出是
    return 0;
}

C++string类字符串处理字符串操作修改时间:2026-06-27 19:36:47

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。