Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从字符串中分离子字符串_C++ - Fatal编程技术网

C++ 从字符串中分离子字符串

C++ 从字符串中分离子字符串,c++,C++,我有以下字符串: std::string str = "Mode:AAA:val:101:id:A1"; 我想分离一个子字符串,它位于“val:和”:id“之间。以下是我的方法: std::string pattern1 = "val:"; std::string pattern2 = ":id"; auto pattern1begin = str.find(pattern1); auto pattern2begin = str.find(pattern2); auto pattern1end

我有以下字符串:

std::string str = "Mode:AAA:val:101:id:A1";
我想分离一个子字符串,它位于
“val:
”:id“
之间。以下是我的方法:

std::string pattern1 = "val:";
std::string pattern2 = ":id";
auto pattern1begin = str.find(pattern1);
auto pattern2begin = str.find(pattern2);
auto pattern1end = pattern1begin + pattern1.size();
auto substrlength = pattern2begin - pattern1end;
auto val = str.substr(pattern1end, substrlength);

您是否知道在上述情况下可以使用其他一些方法来分离子字符串(包括boost或std::regex)

您可能希望查找
val:XXX
并获取
XXX
,而不是
val:
之间的内容:id

如果XXX是一个数字序列,那么您可以

#include <iostream>
#include <regex>
#include <string>

int main()
{
    std::string str = "Mode:id:AAA:val:101:id:A1";
    std::smatch matches;
    if (std::regex_search(str, matches, std::regex("val:(\\d+)")))
    {
        std::cout <<  matches[1];
    }
}
#包括
#包括
#包括
int main()
{
std::string str=“Mode:id:AAA:val:101:id:A1”;
std::smatch匹配;
if(std::regex_搜索(str,matches,std::regex(“val:(\\d+)))
{

std::cout您是否总是在
:val:
:id:
之间拥有所需的数字?也许您可以查看正则表达式!或者使用和在
':'
上分离。或者可能使用。您应该从偏移量开始第二次查找,而不是从开始。这只使用两个字符串搜索和基本迭代器算术。不确定您是否可以查找任何更快的内容…除了可以尝试在pattern1end之后查找pattern2,以避免在不合适的位置进行搜索。