使用命令 std::string::substr 在 C++ 中拆分字符串

Posted

技术标签:

【中文标题】使用命令 std::string::substr 在 C++ 中拆分字符串【英文标题】:Split the string in C++ using command std::string::substr 【发布时间】:2016-03-20 03:33:33 【问题描述】:

我可以得到字符串的前半部分:

 insert1 = tCreatureOne.substr(0, (tCreatureOne.length) / 2

我不知道如何获取字符串的后半部分

insert2 = tCreatureOne.substr((tCreatureOne.length) / 2), ?????)

这是我的代码。

// Insert creature two in to the
//middle of creature one.Science!
// Hamster and Emu make a HamEmuster

std::string PerformScience(std::string tCreatureOne, std::string tCreatureTwo)



    std::string insert1;
    std::string insert2;
    std::string insert3;


        // first half : 0 to middle

        insert1 = tCreatureOne.substr(0, (tCreatureOne.length) / 2); 

    // last half: from middle to the end
        insert2 = tCreatureOne.substr((tCreatureOne.length) / 2), tCreatureOne.length); 

        insert3 = insert1 + tCreatureTwo + insert2;

    return insert3;

【问题讨论】:

您不能不再次致电substr()!签出this。 来自cplusplus.com/reference/string/string/substr 我怀疑你正在寻找string::npos。 IE。 insert2 = tCreatureOne.substr((tCreatureOne.length) / 2), std::string::npos); @CraigYoung std::string::npos 已经是默认设置。根本不需要指定第二个参数。 【参考方案1】:

可能最重要的开发人员技能是知道如何进行在线研究。谷歌搜索“c++ substr”显示这是最高结果:http://www.cplusplus.com/reference/string/string/substr/

在参数描述部分,len描述如下:

要包含在子字符串中的字符数(如果字符串较短,则使用尽可能多的字符)。string::npos 的值表示直到字符串末尾的所有字符。

所以你可以写:

insert2 = tCreatureOne.substr(tCreatureOne.length() / 2), std::string::npos);

但是,请注意substr 声明如下:

string substr (size_t pos = 0, size_t len = npos) const;

意思是len,很方便默认为npos。 因此你可以更简单地写:

insert2 = tCreatureOne.substr(tCreatureOne.length() / 2));

然而,即使substr 没有这样方便的方法来指定“字符串的其余部分”,您仍然可以很容易地计算如下:

int totalLength = tCreatureOne.length();
int firstLength = totalLength / 2;
int remainderLength = totalLength - firstLength;

//So...
insert2 = tCreatureOne.substr(tCreatureOne.length() / 2), remainderLength);

【讨论】:

我犯了一个错误。我应该写 tCreatureOne.length() 而不是 tCreatureOne.length 谢谢你的帮助,你的回答真的帮助我理解了关于子字符串命令的一切,并帮助我按时完成了硬件【参考方案2】:

πάντα ῥεῖ 在他们的评论中是正确的 - 要检索字符串的后半部分,您不需要指定第二个参数(字符串的结尾):

insert2 = tCreatureOne.substr(tCreatureOne.length() / 2);

上面的代码可以正常工作。另外,由于您使用的是std::string,请记住将括号添加到length() 调用中。

【讨论】:

以上是关于使用命令 std::string::substr 在 C++ 中拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

为啥 std::basic_string::substr 不遵循 [begin, end) 约定?

C++ 正则表达式提取子字符串

C++ 17:string_view

每天一个 Linux 命令网络相关命令(ifconfigroutepingtraceroutenetstatsstelnetrcpscp)

CMD命令使用方法

linux中man命令的使用