如何使用c ++在参数之间找到子字符串

use*_*508 1 c++ substring

我怎么能定义一个带字符串的方法呢?

asdfgsdfg:ijtij ijdfgh ija::saf 1999 bp
Run Code Online (Sandbox Code Playgroud)

并返回子字符串

ijtij ijdfgh ija::saf 1999
Run Code Online (Sandbox Code Playgroud)

也就是说,我想要在冒号的第一个实例之间的所有数据,直到找到bp字符组合,在字符串的末尾.

小智 7

string original = "asdfgsdfg:ijtij ijdfgh ija::saf 1999 bp";

size_t s = original.find(":");
size_t e = original.find("bp", s);
string sub = original.substr(s + 1, e - s -1);
cout << sub ;
Run Code Online (Sandbox Code Playgroud)


JBe*_*ley 5

使用std::string::find查找第一个冒号和冒号后第一个发生的历史“BP”。然后用于std::string::substr获取这些位置之间的子字符串。

#include <iostream>
#include <string>

int main()

{
    std::string str = "asdfgsdfg:ijtij ijdfgh ija::saf 1999 bp";
    int start = str.find(":");
    int end = str.find("bp", start);
    std::string substring;
    if (start != std::string::npos && end != std::string::npos)
    {
       substring = str.substr(start + 1, end - start - 1);
    }
    else
    {
       // Whatever you want to do if the markers are missing.
    }
    std::cout << substring;
}
Run Code Online (Sandbox Code Playgroud)

输出在这里

编辑:根据 MooingDuck 对 stardust_ 答案的评论,目前尚不清楚您对“bp”标记的意图是什么。第一个找到的“bp”实例是否结束了子字符串,还是子字符串总是在原始字符串的最后两个字符之前结束?(在这种情况下,它们是否是“bp”无关紧要)。如果是后者,则修改如下:

#include <iostream>
#include <string>

int main()

{
    std::string str = "asdfgsdfg:ijtij ijdfgh ija::saf 1999 bp";
    int start = str.find(":");
    int end = str.length() - 2; // Changed here
    std::string substring;
    if (start != std::string::npos && end != std::string::npos)
    {
       substring = str.substr(start + 1, end - start - 1);
    }
    else
    {
       // Whatever you want to do if the markers are missing.
    }
    std::cout << substring;
}
Run Code Online (Sandbox Code Playgroud)

输出在这里