深入探索 C++ STL 中的 String 容器:字符串操作全解析

C++字符串操作全解析

在C++编程中,字符串是一种非常常用的数据类型。它不仅可以用于存储和处理文本信息,还可以通过各种操作实现强大的功能。本文将详细介绍C++中字符串的构造、赋值、拼接、查找、替换、插入、删除、比较以及字符存取等常用操作。

一、字符串的构造

字符串的构造方式非常灵活,以下是几种常见的构造方式:

cpp复制

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

void test1()
{
    string s1; // 默认构造,空字符串
    const char* str = "Hello"; // C风格字符串
    string s2(str); // 从C风格字符串构造
    string s3(9, 'a'); // 构造一个包含9个字符'a'的字符串
    string s4(s2); // 拷贝构造
    cout << s2 << endl << s3 << endl << s4 << endl;
}
  • 默认构造:创建一个空字符串。

  • 从C风格字符串构造:将C风格字符串转换为C++字符串。

  • 指定字符重复构造:通过指定字符和重复次数构造字符串。

  • 拷贝构造:通过已有的字符串构造新字符串。

二、字符串的赋值

字符串的赋值可以通过多种方式实现,包括直接赋值、使用assign函数等:

cpp复制

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

void test2()
{
    // 直接赋值
    string s1;
    s1 = 'a';
    cout << s1 << endl;
    string s2;
    s2 = "Hello World";
    cout << s2 << endl;
    string s3;
    s3 = s2;
    cout << s3 << endl;

    // 使用assign函数赋值
    string s4;
    s4.assign("Hello World");
    cout << s4 << endl;
    string s5;
    s5.assign("Hello World", 5); // 只赋值前5个字符
    cout << s5 << endl;
    string s6;
    s6.assign(s5);
    cout << s6 << endl;
    string s7;
    s7.assign(5, 'A'); // 赋值5个字符'A'
    cout << s7 << endl;
}
  • 直接赋值:通过=操作符直接给字符串赋值。

  • 使用assign函数:可以指定字符串的内容、长度或重复字符等方式进行赋值。

三、字符串的拼接

字符串的拼接可以通过+=运算符或append函数实现:

cpp复制

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

void test3()
{
    // +=运算符重载
    string s1("我");
    s1 += "爱玩"; // 拼接字符串
    s1 += ':'; // 拼接单字符
    string s2 = "王者荣耀";
    s1 += s2; // 拼接另一个字符串
    cout << s1 << endl;

    // 使用append函数
    string s11;
    s11.append("I lov");
    s11.append("e you you", 5); // 拼接前5个字符
    cout << s11 << endl;
    string s12 = ",you are";
    s11.append(s12);
    string s13 = ",you are beautiful";
    s11.append(s13, 8, 18); // 选取拼接
    cout << s11 << endl;
}
  • +=运算符:可以方便地将字符串、字符或另一个字符串拼接到当前字符串的末尾。

  • append函数:提供了更灵活的拼接方式,可以指定拼接的内容、长度等。

四、字符串的查找

字符串的查找可以通过findrfind函数实现:

cpp复制

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

void test4()
{
    string s = "abcabc";
    size_t pos = 0; // size_t 无符号整数类型,主要用于数组下标
    pos = s.find("bc"); // 从左往右查找,返回第一个匹配项的下标
    cout << pos << endl;
    pos = s.rfind("bc"); // 从右往左查找,返回第一个匹配项的下标
    cout << pos << endl;
}
  • find函数:从左往右查找子串,返回子串第一次出现的位置。

  • rfind函数:从右往左查找子串,返回子串最后一次出现的位置。

五、字符串的替换

字符串的替换可以通过replace函数实现:

cpp复制

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

void test5()
{
    string s = "abcdefg";
    cout << s << endl;
    s.replace(1, 3, "HELLO"); // 将s下标1到3的内容换成"HELLO"
    cout << s << endl;
}
  • replace函数:可以指定起始位置和长度,将指定范围的内容替换为新的字符串。

六、字符串的插入和删除

字符串的插入和删除可以通过inserterase函数实现:

cpp复制

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

void test8()
{
    string s = "0000000";
    cout << s << endl;
    s.insert(1, "SSSSS"); // 在指定位置插入字符串
    cout << s << endl;
    s.erase(0, 6); // 删除指定范围的字符
    cout << s << endl;
}
  • insert函数:可以在指定位置插入字符串。

  • erase函数:可以删除指定范围的字符。

七、字符串的比较

字符串的比较可以通过compare函数实现:

cpp复制

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

static void my_print(int a)
{
    if (a == 0)
    {
        cout << "相等" << endl;
    }
    else if (a == 1)
    {
        cout << "大于" << endl;
    }
    else
    {
        cout << "小于" << endl;
    }
}

void test6()
{
    string s1 = "ac";
    string s2 = "acb"; // 按字典序比较
    string s3 = "abc"; // 按字典序比较
    string s4 = "ac";
    int ret = 0;
    ret = s1.compare(s2);
    my_print(ret);
    ret = s1.compare(s3);
    my_print(ret);
    ret = s1.compare(s4);
    my_print(ret);
}
  • compare函数:按字典序比较两个字符串,返回值为0表示相等,小于0表示小于,大于0表示大于。

八、字符串的子串提取

字符串的子串提取可以通过substr函数实现:

cpp复制

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

void test9()
{
    string s = "1760690311@qq.com";
    size_t pos = s.find('@');
    string username = s.substr(0, pos); // 提取子串
    cout << "用户名:" << username << endl;
}
  • substr函数:可以指定起始位置和长度,提取子串。

九、字符串的字符存取

字符串的字符存取可以通过下标操作符[]at函数实现:

cpp复制

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

void test7()
{
    string s = "0000000";
    cout << s << endl;
    size_t len = s.size(); // 获取字符串长度
    for (int i = 0; i < len; i++)
    {
        cout << s[i]; // 使用下标操作符访问字符
    }
    cout << endl;
    int i = 0;
    while (i < len)
    {
        cout << s.at(i); // 使用at函数访问字符
        i++;
    }
    cout << endl;
    s[1] = 'S'; // 修改字符
    s.at(2) = 'N'; // 修改字符
    cout << s << endl;
}
  • 下标操作符[]:可以直接通过下标访问和修改字符。

  • at函数:提供了更安全的字符访问方式,会进行边界检查。

总结

C++中的字符串操作功能强大且灵活,通过构造、赋值、拼接、查找、替换、插入、删除、比较、子串提取和字符存取等操作,可以满足各种复杂的文本处理需求。掌握这些操作方法,可以让你在C++编程中更加高效地处理字符串相关的任务。

希望本文对你有所帮助,如果有任何问题或建议,欢迎在评论区留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值