在C++中,substr()
是 std::string
类的一个成员函数,用于从字符串中提取子字符串。以下是 substr()
函数的一些基本用法:
语法
substr(size_t pos = 0, size_t len = npos)
pos
是子字符串开始的位置(基于 0 的索引)。如果不提供,它默认为 0,即从字符串的开头开始。len
是要提取的子字符串的长度。如果不提供,npos
(std::string::npos
)将被用作默认值,这意味着子字符串将从pos
开始一直延伸到原字符串的末尾。
使用示例
-
提取整个字符串:
std::string s = "Hello, World!"; std::string sub = s.substr(); // sub 现在是 "Hello, World!"
-
从字符串中间开始提取:
std::string s = "Hello, World!"; std::string sub = s.substr(7); // 从索引 7 开始 // sub 现在是 "World!"
-
提取特定长度的子字符串:
std::string s = "Hello, World!"; std::string sub = s.substr(7, 5); // 从索引 7 开始,长度为 5 // sub 现在是 "World"
-
提取到字符串末尾的子字符串:
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 1≤N≤200
输入样例:
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;
}