当找到 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_of
、std::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,单个反斜杠在字符串文字中写为 "\"
。
假设我有如下字符串
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_of
、std::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,单个反斜杠在字符串文字中写为 "\"
。