【C++】—— `string` 类的了解与使用

在C++编程中,string类是处理字符串最常用的工具,它简化了字符数组操作,提供了丰富的函数接口来处理各种字符串操作,如拼接、查找、替换等。相比传统的C语言中的字符数组,C++ string类在功能、效率和安全性上有显著的改进。

一、string的基本使用

要使用C++标准库的string类,需要包含<string>头文件。接下来,让我们来看如何创建、初始化和使用string对象。

#include <iostream>
#include <string>

int main() {
    // 1. 默认构造
    std::string s1;

    // 2. 通过C字符串初始化
    std::string s2 = "Hello, world!";

    // 3. 通过拷贝构造
    std::string s3 = s2;

    // 4. 指定字符重复次数初始化
    std::string s4(5, 'A'); // "AAAAA"

    std::cout << "s1: " << s1 << std::endl;
    std::cout << "s2: " << s2 << std::endl;
    std::cout << "s3: " << s3 << std::endl;
    std::cout << "s4: " << s4 << std::endl;

    return 0;
}

输出结果:

s1: 
s2: Hello, world!
s3: Hello, world!
s4: AAAAA

二、string的常用操作

1. 字符串长度

可以使用size()或者length()函数来获取字符串的长度。这两个函数是等价的。

std::string str = "C++ string class";
std::cout << "字符串长度: " << str.size() << std::endl;  // 输出:16
2. 字符串拼接

使用+运算符可以将两个字符串拼接在一起,也可以使用append()方法。

#include <iostream>
#include <string>

int main() {
    std::string s1 = "Hello";
    std::string s2 = " World";

    // 使用 + 进行拼接
    std::string s3 = s1 + s2;
    std::cout << "拼接结果: " << s3 << std::endl;

    // 使用 append() 拼接
    s1.append(s2);
    std::cout << "append() 后: " << s1 << std::endl;

    return 0;
}

输出结果:

拼接结果: Hello World
append() 后: Hello World
3. 访问字符

可以使用[]运算符或at()方法访问字符串中的某个字符。

std::string str = "C++";
std::cout << "第一个字符: " << str[0] << std::endl;  // 输出:C
std::cout << "第二个字符: " << str.at(1) << std::endl;  // 输出:+
4. 字符串查找

find()函数可以用来查找子串在字符串中的位置,如果找到,返回子串第一次出现的起始位置;如果没有找到,返回std::string::npos

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, C++ World";

    size_t pos = str.find("C++");
    if (pos != std::string::npos) {
        std::cout << "找到 'C++' 的位置: " << pos << std::endl;
    } else {
        std::cout << "未找到子串" << std::endl;
    }

    return 0;
}

输出结果:

找到 'C++' 的位置: 7
5. 字符串替换

replace()方法用于替换字符串中的子串。它可以通过指定位置和长度来替换,也可以直接替换某个子串。

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, C++ World";

    // 替换 C++ 为 Java
    str.replace(7, 3, "Java");
    std::cout << "替换后的字符串: " << str << std::endl;

    return 0;
}

输出结果:

替换后的字符串: Hello, Java World
6. 字符串插入与删除

insert()erase()方法分别用于在字符串中插入和删除子串。

#include <iostream>
#include <string>

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

    // 在位置6插入子串 "C++ "
    str.insert(6, "C++ ");
    std::cout << "插入后的字符串: " << str << std::endl;

    // 删除位置6开始的3个字符
    str.erase(6, 3);
    std::cout << "删除后的字符串: " << str << std::endl;

    return 0;
}

输出结果:

插入后的字符串: Hello C++ World
删除后的字符串: Hello World

三、C++字符串与C字符串的转换

1. stringchar*

可以通过c_str()函数将C++ string转换为C风格的字符串,即char*

#include <iostream>
#include <string>

int main() {
    std::string cppStr = "C++ String to C-String";
    const char* cStr = cppStr.c_str();

    std::cout << "C-Style String: " << cStr << std::endl;
    return 0;
}
2. char*string

可以通过直接赋值将C字符串转换为C++的string

#include <iostream>
#include <string>

int main() {
    const char* cStr = "C-String to C++ String";
    std::string cppStr = cStr;

    std::cout << "C++ Style String: " << cppStr << std::endl;
    return 0;
}

四、string的迭代器

string类还提供了标准的迭代器接口,允许你遍历字符串中的每个字符。你可以使用begin()end()方法来获取迭代器。

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, C++!";

    // 使用迭代器遍历字符串
    for (std::string::iterator it = str.begin(); it != str.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}

输出结果:

H e l l o ,   C + + !

五、字符串比较

可以使用==!=等运算符直接比较两个字符串,或者使用compare()方法进行更加细粒度的比较。

#include <iostream>
#include <string>

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

    if (str1 == str3) {
        std::cout << "str1 和 str3 相等" << std::endl;
    }

    if (str1 != str2) {
        std::cout << "str1 和 str2 不相等" << std::endl;
    }

    return 0;
}

输出结果:

str1 和 str3 相等
str1 和 str2 不相等

六、总结

C++ string类提供了丰富且强大的字符串处理功能,简化了开发中的许多复杂操作。相比C语言的字符数组,string更加安全、易用且功能强大。本文展示了string的创建、拼接、访问、查找、替换、插入、删除等常见操作,以及stringchar*之间的转换。通过这些基本操作,你可以在C++中更加高效地进行字符串处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只蜗牛儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值