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 表示直到字符串末尾的所有字符。