c++ 的 substr() 是如何工作的? [复制]
Posted
技术标签:
【中文标题】c++ 的 substr() 是如何工作的? [复制]【英文标题】:How substr() of c++ really works? [duplicate] 【发布时间】:2020-10-20 06:31:39 【问题描述】:我正在尝试打印字符串的子字符串,但 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;
输出:
【问题讨论】:
你的第一个数字是子字符串开始的索引,第二个数字是子字符串的长度 第二个参数表示count,即子串的长度。见substr
。
@songyuanyao 指向 Cppreference.com 的链接或 Visual Studio 上的 Interllisence 信息对于初学者来说可能会非常吓人,但是一旦你尝试通读并理解它们,它们就会变得非常简单和有帮助!
cplusplus.com
@sutharp777 不要使用包含lots of wrong or outdated information 的站点。 en.cppreference.com/w/cpp 由专家积极维护,更加可靠和高度更新
【参考方案1】:
string substr (size_t pos = 0, size_t len = npos) const;
生成子字符串 返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本。
子字符串是从字符位置 pos 开始并跨越 len 个字符(或直到字符串末尾,以先到者为准)的对象部分。
参数:
位置:
要作为子字符串复制的第一个字符的位置。 如果这等于字符串长度,则该函数返回一个空字符串。 如果这大于字符串长度,则抛出 out_of_range。 注意:第一个字符用值 0(不是 1)表示。
长度:
要包含在子字符串中的字符数(如果字符串较短,则使用尽可能多的字符)。 string::npos 的值表示直到字符串结尾的所有字符。
【讨论】:
我认为 substr() 的第二个值是结束索引。现在我知道它表示输出字符串的长度(即)子字符串的长度。谢谢知道了!以上是关于c++ 的 substr() 是如何工作的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用命令 std::string::substr 在 C++ 中拆分字符串