首页 > 编程笔记 > C++笔记 阅读:2

C++ string类用法详解(附带实例)

C++ 中,string 是一个功能强大的类,用于表示和处理字符串。

string 提供了一系列的便利函数,如连接、查找、替换、插入、删除和子串操作等。我们可以将 string 想象成一个动态数组,它能够根据需要自动调整大小。

得益于其简洁的操作和优秀的封装性,string 在算法竞赛中备受青睐。

C++ string的初始化

在使用 string 之前,需要包含相应的头文件或直接使用万能头文件:
#include <string>
using namespace std;
string的初始化方式多种多样,接下来分别说明。

使用字符串字面量来初始化:
string str = "Hello World";

使用另一个string对象来初始化:
string str1 = "Hello";
string str2 = str1;

使用字符数组来初始化:
char arr[] = "Hello";
string str3(arr);

使用重复的字符来初始化:
string str4(5, 'A'); // 结果为"AAAAA"

C++ string的基本操作

下表列出了一些常用的 string 操作方法及其时间复杂度。

表:常用的 string 操作方法及其时间复杂度
方法 作用 时间复杂度
length() 返回字符串的长度 O(1)
empty() 判断字符串是否为空 O(1)
substr(pos, len) 返回从 pos 开始、长度为 len 的子串(若省略 len,则表示截取到末尾) O(len)
erase(pos, len) 删除从 pos 开始、长度为 len 的子串 O(len)
operator + char/str 将字符或字符串拼接到当前字符串后面 O(len)
operator<、<=、>、>=、== 按字典顺序比较字符串 O(n)
find(str) 返回指定字符串或字符在当前字符串中第一次出现的位置 O(nm)

在算法竞赛中,string 通常用作键值,较少涉及修改操作。若需频繁修改或构造字符串,建议选用字符数组。这是因为字符数组在某些操作上会更高效。

【实例】给定一个仅包含大写字母的长度为 n 的字符串 S,求出其回文子串的数量。
1) 输入格式:
本题有多组测试用例,第一行包含一个整数 T,表示测试用例的数量(1≤T≤1000)。

对于每组测试用例:
第一行包含一个整数 n(1≤∑n≤103),表示字符串长度。
第二行包含一个仅由大写字母组成的字符串 S。

2) 输出格式:
输出一个整数,表示结果。

样例:


计算一个给定字符串中回文子串的数量,可以通过枚举所有可能的子串,并检查每个子串是否为回文来解决这个问题。由于题目对时间复杂度没有严格限制,我们可以利用 string 类的 substr() 方法来简化编程过程,从而使代码更加简洁且易于理解。
#include <bits/stdc++.h>
using namespace std;

// 判断一个字符串是否为回文串
bool isPalindrome(string s) {
    for(int i = 0, j = (int)s.length() - 1; i <= j; ++ i, -- j)
        if(s[i] != s[j]) return false; // 如果两端字符不相等,则不是回文串
    return true; // 否则是回文串
}

// 解决问题的主要函数
void solve() {
    int n;
    cin >> n; // 输入字符串的长度
    string s;
    cin >> s; // 输入字符串
    int ans = 0; // 初始化回文子串的数量
    // 遍历所有可能的子串
    for(int i = 0; i < n; ++ i)
        for(int j = i; j < n; ++ j)
            if(isPalindrome(s.substr(i, j - i + 1))) ans++; // 如果子串是回文串,则计数器加1
    cout << ans << '\n'; // 输出回文子串的数量
}

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); // 优化输入/输出流

    int N;
    cin >> N; // 输入测试用例的数量
    while (N--)
        solve(); // 对每个测试用例调用solve函数
    return 0;
}

相关文章