当找到 RHS 中的字符 '\' 时从主字符串中获取一个单词或子字符串,然后擦除其余部分

Getting a word or sub string from main string when char '\' from RHS is found and then erase rest

假设我有如下字符串

input = " \\PATH\MYFILES 这是我的刺"

输出= 我的文件

从 RHS 中找到第一个字符 '\' 时获取单词 (即 MYFILES) 并删除其余部分。

下面是我的方法,我很累,但它很糟糕,因为有一个运行时错误,因为 ABORTED TERMINATED WITH A CORE。

请建议最干净的 and/or 从上面的字符串中只获取一个单词(即 MYFILES )的最短方法?

过去两天我一直在搜索和尝试,但没有成功。请帮忙

注意:上面示例中的输入字符串没有硬编码,因为它应该是。字符串包含动态变化,但 char '\' 肯定可用。

std::regex const r{R"~(.*[^\]\([^\])+).*)~"} ;
std::string s(R"("  //PATH//MYFILES     This is my sting    "));
std::smatch m;
int main()
{

if(std::regex_match(s,m,r))
{
std::cout<<m[1]<<endl;

}
}
}

要擦除字符串的一部分,您必须找到该部分的开始和结束位置。在 std::string 中查找 somethig 非常容易,因为 class 有六个内置方法(std::string::find_first_ofstd::string::find_last_of 等)。这是一个如何解决您的问题的小例子:

#include <iostream>
#include <string>

int main() {
    std::string input { " \PATH\MYFILES This is my sting " };
    auto pos = input.find_last_of('\');    

    if(pos != std::string::npos) {
        input.erase(0, pos + 1);

        pos = input.find_first_of(' ');
        if(pos != std::string::npos)
            input.erase(pos);
    }

    std::cout << input << std::endl;
}

注意: 注意 escape sequences,单个反斜杠在字符串文字中写为 "\"