2013-03-06 22 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