c++中的substr函数

在C++中,substr()std::string 类的一个成员函数,用于从字符串中提取子字符串。以下是 substr() 函数的一些基本用法:

语法

substr(size_t pos = 0, size_t len = npos)

  • pos 是子字符串开始的位置(基于 0 的索引)。如果不提供,它默认为 0,即从字符串的开头开始。
  • len 是要提取的子字符串的长度。如果不提供,nposstd::string::npos)将被用作默认值,这意味着子字符串将从 pos 开始一直延伸到原字符串的末尾。

使用示例

  1. 提取整个字符串

    std::string s = "Hello, World!";
    std::string sub = s.substr();
    // sub 现在是 "Hello, World!"
    
  2. 从字符串中间开始提取

    std::string s = "Hello, World!";
    std::string sub = s.substr(7); // 从索引 7 开始
    // sub 现在是 "World!"
    
  3. 提取特定长度的子字符串

    std::string s = "Hello, World!";
    std::string sub = s.substr(7, 5); // 从索引 7 开始,长度为 5
    // sub 现在是 "World"
    
  4. 提取到字符串末尾的子字符串

    std::string s = "Hello, World!";
    std::string sub = s.substr(5, std::string::npos);
    // sub 现在是 ", World!"
    

注意事项

  • 如果 pos 大于字符串的长度,substr() 将抛出 std::out_of_range 异常。
  • 如果 pos 合法但 pos + len 超出了字符串的末尾,substr() 将只提取到字符串的末尾,而不是抛出异常。

substr() 是一个非常有用的函数,可以在处理字符串时提供灵活性。然而,值得注意的是,在 C++11 及以后的版本中,更推荐使用 std::string::substr() 的替代函数 std::string::operator()(),因为它提供了更好的异常安全性。

例题

最长公共字符串后缀

给出若干个字符串,输出这些字符串的最长公共后缀。

输入格式

由不超过 5 5 5 组输入组成。

每组输入的第一行是一个整数 N N N

N N N 0 0 0 时表示输入结束,否则后面会继续有 N N N 行输入,每行是一个字符串(字符串内不含空白符)。

每个字符串的长度不超过 200 200 200

输出格式

每组数据输出一行结果,为 N N N 个字符串的最长公共后缀(可能为空)。

数据范围

1 ≤ N ≤ 200 1 \le N \le 200 1N200

输入样例:
3
baba
aba
cba
2
aa
cc
2
aa
a
0
输出样例:
ba

a
C++ 代码
#include 
#include 
#include 
using namespace std;

int main()
{
    int n;
    while(cin >> n, n)
    {
        string s, a;
        int MAX = 999999;
        cin >> s;
        for(int i = 1; i < n; ++ i)
        {
            int res = 0;
            cin >> a;
            for(int j = 0; j < a.size() && j < s.size(); ++ j)
                if(a[a.size() - 1 - j] == s[s.size() - 1 - j]) res++;
                else break;
            MAX = min(MAX, res);
        }
        if(MAX) cout << s.substr(s.size()-MAX) << endl;
        else cout << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小宇宙中微子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值