2013-03-06 70 views
3

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

该示例中的地址是I0043

现在我想在地址后面切断字符串,但是有更多可能的变量名称,例如I0043PROT/...

有没有可能告诉例如getline以各种符号结束? 像:getline(tmp_stringstream,tmp_string, 'C' || 'P');

谢谢

帕特里克

+0

升压有'提振:: split',这做就怎么做你想要什么。据我所知,标准库没有这样的功能,如果你不能使用boost,你将不得不自己实现。 – us2012 2013-03-06 07:26:07

+0

它总是第5个字符吗?此外,['std :: string :: find_first_of'](http://en.cppreference.com/w/cpp/string/basic_string/find_first_of)将搜索字符串,直到找到与指定字符匹配的任何字符。 – 2013-03-06 09:44:10

+0

@PeterWood不,不幸的是,它并不总是这样,这就是为什么我更喜欢us2012的方法。 – 2013-03-06 16:31:56

回答

1

boost::split做你所需要的:http://www.boost.org/doc/libs/1_53_0/doc/html/string_algo/usage.html#idp163440592

std::string mystring("asd,ff.erw qewr"); 
std::vector<std::string> tokens; 
boost::split(tokens, mystring, boost::is_any_of(",.-/ ")); 
+0

完美,那就是我一直在寻找的东西。非常感谢你。 – 2013-03-06 07:40:02

+0

@Patrick如果有帮助,请考虑接受它:http://meta.stackexchange.com/questions/5234 – us2012 2013-03-06 07:50:19

+0

完成后,再次感谢你 – 2013-03-06 07:53:29

0

在C运行时库有一个字符串标记功能,strtok(包括< string.h中>)

在C++运行时,再是等效std::strtok(包括<:字符串>)

0

您可以使用std::string::find_first_of,并std::string::substr

string line("I0043CTRL/CALH1$ST$Beh$stVal;Len=4;MMSType=133;Flag=RW"); 

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

输出:

I0043 
+0

但是,当有其他类型的变量时,我再次遇到问题,例如它们将被命名为“I0043PROT/...”。或者我错过了什么? – 2013-03-06 16:33:40

+0

您可以给出一系列示例输入和输出吗? – 2013-03-06 16:50:21

+0

我不确定我是否理解;我正在做你在你的问题中所说的话。 – 2013-03-07 07:52:29