c++ 的 substr() 是如何工作的?
How substr() of c++ really works?
我正在尝试打印字符串的子字符串,但 substr() 函数的行为对我来说似乎很奇怪。
在我下面的程序中,我尝试打印值为“Kamal”的字符串的子字符串。
在这里,substr(0,4) 打印“Kama”,这让我假设 0 是包容性的,4 是排他性的。
但是 substr(1,4) 打印出“amal”,这违反了我的上述理解,因为打印了位置 4 中的字符,而在之前的情况下它没有。
你能解释一下这种奇怪的行为吗?
如果这个问题真的很愚蠢,对不起,这是我第一次使用 substr()。我在网上搜索过,但似乎找不到任何有用的答案。
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1 = "Kamal";
cout << s1.substr(0, 4) << '\n';
cout << s1.substr(1, 4) << '\n';
return 0;
}
输出:
string substr (size_t pos = 0, size_t len = npos) const;
生成子字符串
Returns 一个新构造的字符串对象,其值初始化为此对象的子字符串的副本。
子字符串是对象的一部分,从字符位置 pos 开始并跨越 len 个字符(或直到字符串结尾,以先到者为准)。
参数:
pos:
要作为子字符串复制的第一个字符的位置。
如果这等于字符串长度,函数 returns 一个空字符串。
如果这大于字符串长度,它会抛出 out_of_range。
注意:第一个字符用值 0(不是 1)表示。
len:
要包含在子字符串中的字符数(如果字符串较短,则使用尽可能多的字符)。
值 string::npos 表示直到字符串末尾的所有字符。
我正在尝试打印字符串的子字符串,但 substr() 函数的行为对我来说似乎很奇怪。
在我下面的程序中,我尝试打印值为“Kamal”的字符串的子字符串。
在这里,substr(0,4) 打印“Kama”,这让我假设 0 是包容性的,4 是排他性的。 但是 substr(1,4) 打印出“amal”,这违反了我的上述理解,因为打印了位置 4 中的字符,而在之前的情况下它没有。 你能解释一下这种奇怪的行为吗?
如果这个问题真的很愚蠢,对不起,这是我第一次使用 substr()。我在网上搜索过,但似乎找不到任何有用的答案。
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1 = "Kamal";
cout << s1.substr(0, 4) << '\n';
cout << s1.substr(1, 4) << '\n';
return 0;
}
输出:
string substr (size_t pos = 0, size_t len = npos) const;
生成子字符串 Returns 一个新构造的字符串对象,其值初始化为此对象的子字符串的副本。
子字符串是对象的一部分,从字符位置 pos 开始并跨越 len 个字符(或直到字符串结尾,以先到者为准)。
参数:
pos:
要作为子字符串复制的第一个字符的位置。 如果这等于字符串长度,函数 returns 一个空字符串。 如果这大于字符串长度,它会抛出 out_of_range。 注意:第一个字符用值 0(不是 1)表示。
len:
要包含在子字符串中的字符数(如果字符串较短,则使用尽可能多的字符)。 值 string::npos 表示直到字符串末尾的所有字符。