C++ 如何在各种标志处剪线

C++ 如何在各种标志处剪线,c++,string,getline,C++,String,Getline,我有以下问题: 我从.csv文件中读取WinCC变量。现在有一个包含ip地址的字符串。它看起来是这样的:I0043CTRL/CALH1$ST$Beh$stVal;Len=4;MMSType=133;Flag=RW 本例中的地址是I0043 现在我想剪切地址后面的字符串,但变量名可能更多,例如I0043PROT/… 例如,有没有可能告诉getline在不同的标志处结束? 比如:getline(tmp_stringstream,tmp_string,'C'| |'P') 多谢各位 Patrickbo

我有以下问题: 我从.csv文件中读取WinCC变量。现在有一个包含ip地址的字符串。它看起来是这样的:
I0043CTRL/CALH1$ST$Beh$stVal;Len=4;MMSType=133;Flag=RW

本例中的地址是
I0043

现在我想剪切地址后面的字符串,但变量名可能更多,例如
I0043PROT/…

例如,有没有可能告诉getline在不同的标志处结束? 比如:
getline(tmp_stringstream,tmp_string,'C'| |'P')

多谢各位


Patrick

boost::split
可以满足您的需要:

std::string mystring(“asd,ff.erw qewr”);
std::向量标记;
boost::split(令牌、mystring、boost::是(“,.-/”)中的任意一个);

在C运行时库中有一个字符串标记器函数(包括

C++运行时中有一个等价的(包括

,可以使用,和:


Boost有
Boost::split
,它可以完全满足您的需求。据我所知,标准库没有这样的功能,如果你不能使用boost,你就必须自己实现它。它总是前5个字符吗?此外,将搜索字符串,直到找到与指定字符匹配的任何字符。@PeterWood不,不幸的是,它并不总是这样,这就是为什么我更喜欢us2012中的方法。太好了,这正是我想要的。非常感谢。“帕特里克,如果它有帮助,请考虑接受它:”Peter So?OP是一个新用户,就像那个元线程上被接受的答案所说的那样,我问得很有礼貌。你到底有什么不喜欢的?@us2012我没说我不喜欢。你很有礼貌,但是我又遇到了一个问题,当有其他类型的变量时,它们会被命名为“I0043PROT/…”。或者我遗漏了什么?你能给出一系列输入和输出的例子吗?我不确定我是否理解;我完全按照你在问题中所说的去做。啊,这是我的错,我没有首先查找查找结果,以为只有当所有的符号都在字符串中时它才起作用。我也会试试这个版本,谢谢。
std::string mystring("asd,ff.erw qewr");
std::vector<std::string> tokens;
boost::split( tokens, mystring, boost::is_any_of(",.-/ ") );
string line("I0043CTRL/CALH1$ST$Beh$stVal;Len=4;MMSType=133;Flag=RW");

cout << line.substr(0, line.find_first_of("CP"));
I0043