c++ 字符串操作

本文详细介绍了C++中std::string类的初始化、赋值、元素访问、迭代、C风格字符串处理、字符串拼接、擦除替换、查找子串、编辑比较以及大小写转换等常见操作,帮助读者深入了解和使用这个标准库类型。
摘要由CSDN通过智能技术生成

在C++中,std::string 是用于操作字符串的标准库类型,它提供了丰富的成员函数来执行各种字符串操作,接下来我们一起来看一下常用操作和对应的成员函数,欢迎大家补充说明!!!

初始化和赋值

构造函数:初始化字符串
std::string str1;  // 默认构造函数
std::string str2("Hello");  // 从C-string创建string
std::string str3(str2);  // 拷贝构造函数
赋值函数:给字符串赋新值
std::string str;
str = "Hello, World!";
str.assign("New Value");

元素访问

访问单个字符
//下标运算符[]提供直接的访问,但它不会检查下标是否越界。越界访问是未定义行为,它不会提供任何安全检查,所以使用时要确保索引合法
std::string str = "Hello, World!";
char c1 = str[0];  // 访问第一个字符,'H'
char c2 = str[str.size() - 1];  // 访问最后一个字符,'!'

//at成员函数与下标运算符相似,但at将会检查给定的下标是否在有效范围内。如果下标越界,at会抛出一个std::out_of_range异常。
char c1 = str.at(0);  // 访问第一个字符,'H'
char c2 = str.at(str.size() - 1);  // 访问最后一个字符,'!'
修改单个字符
str[0] = 'h';  // 将第一个字符修改为'h';在使用下标运算符进行修改时应当小心,避免越界写入,
str.at(1) = 'e';  // 将第二个字符修改为'e'
迭代字符串中的字符
// 使用迭代器
for (auto it = str.begin(); it != str.end(); ++it) {
    std::cout << *it;
}
for (std::string::iterator it = str.begin(); it != str.end(); ++it) {
    std::cout << *it;
}
// 使用常量迭代器遍历字符串,不会修改字符串的内容
for (std::string::const_iterator it = str.cbegin(); it != str.cend(); ++it) {
    std::cout << *it;
}

// 使用范围基于for循环
for (auto ch : str) {
    std::cout << ch;
}
获取字符串前后的字符
//应确保字符串不是空的,否则访问结果是未定义的
char first = str.front();  // 获取第一个字符
char last = str.back();    // 获取最后一个字符
C风格字符串

访问字符串的底层字符数组,可以通过 c_str 或 data 方法来实现

//c_str返回的指针指向字符串的内部数据,该数据由std::string对象管理,因此不应使用该指针修改数据或超出其生命周期使用指针
const char* c_str = str.c_str();  // 获取C风格字符串

字符串拼接

std::string s1 = "Hello";
std::string s2 = ", World!";
std::string joined = s1 + s2;
s1 += s2;

擦除与替换

移除字符串中的一部分
str.erase(0, 5);  // 从0位置开始,擦除5个字符
替换字符串中的一部分
str.replace(0, 5, "Hi");  // 将字符串前5个字符替换为"Hi"
也可以在字符串去除指定的字符

查找字符和子串

查找子串或字符
size_t pos = str.find("World");  // 查找"World"首次出现的位置
获取子串
std::string sub = str.substr(0, 5); // 从位置0开始,长度为5的子串

编辑和比较

插入字符或字符串
str.insert(0, "Start: ");  // 在字符串开头插入"Start: "
比较字符串
std::string str1 = "Hello";
std::string str2 = "Hello";
std::string str3 = "World";
std::string str4 = "Hello, World!";

int result = str4.compare(7, 5, str3); // result == 0,子串 "World" 和 str4 相等
bool isEqual = (str1 == str2); // true	比较str1与str2是否相等
bool isNotEqual = (str1 != str3); // true
int result = str1.compare(str3); // 字典序比较str1与str3; result < 0,因为 "Hello" < "World"
大小写转换

C++ 中字符串是区分大小写的,在默认情况下进行比较时,“Hello”和“hello”会被判断为不相等。如需进行不区分大小写的比较,需要实现或使用标准库支持的比较函数,将字符串转换为统一的大小写后再进行比较。
通过标准库函数中的tolower和toupper函数结合标准算法std::transform来实现大小写转换

std::string str = "Hello, World!";
// 转换为小写
std::transform(str.begin(), str.end(), str.begin(),
               [](unsigned char c) { return std::tolower(c); });
// 转换为大写
std::transform(str.begin(), str.end(), str.begin(),
               [](unsigned char c) { return std::toupper(c); });

其他函数

获取字符串长度
 size_t len = str.length();  // 或者使用 str.size();
清空字符串
str.clear();  // 清除字符串内容,变为空字符串
  
检查字符串是否为空
bool is_empty = str.empty();  // 如果字符串长度为0,则返回true
  
转换为C-style字符串
const char* c_str = str.c_str();  // 获取C-style字符串
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘气の小狼人¹º²⁴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值