c++ 字符串操作

发布时间:2024年01月18日

在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字符串
文章来源:https://blog.csdn.net/weixin_43779276/article/details/135641678
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。