2011-09-28 54 views
4

是否有類似於Java的C++的分割類型函數?我知道無視,但我不太明白,以及它如何適用於我的情況。C++的分割函數

我的輸入是:

{ 
    item = ball 
    book = lord of the rings 
    movie = star wars 
} 

我的給定的輸入是<attribute> = <value>和我具有存儲在不同的字符串兩個或整數(取決於的值,例如,如果它的一個數字,使用整數)。

+0

你是什麼意思的'忽略',以及爲什麼你認爲模板有什麼與分裂字符串有什麼關係?查看std :: string的文檔,看看它有什麼。 – bmargulies

+0

@bmargulies在'java' API中有一個'str.split(「=」)'類型的函數,在''C++'API中有一個cin.ignore(1,「=」)我已經嘗試使用忽略,但我迷失在如何擺脫paranthese – SNpn

+1

可能重複的[如何在C++中拆分字符串?](http://stackoverflow.com/questions/236129/how-to -split-a-string-in-c) –

回答

5

使用Boost::tokenizer,因爲它做你想做的事情。從手冊:

// simple_example_1.cpp 
#include<iostream> 
#include<boost/tokenizer.hpp> 
#include<string> 

int main(){ 
    using namespace std; 
    using namespace boost; 
    string s = "This is, a test"; 
    tokenizer<> tok(s); 
    for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ 
     cout << *beg << "\n"; 
    } 
} 
+0

它可以與icc和g ++一起使用。你有提升安裝?你得到的錯誤是什麼? – Sardathrion

0

使用strtok():http://www.cplusplus.com/reference/clibrary/cstring/strtok/

只知道它不能重入,因爲它使用了一個內部靜態變量,所以不要在嵌套循環或類似的東西中調用它兩次。

和編輯:

這是一個非常酷做方案,將令牌化用空格整個字符串 - 你必須在=之後處理值重新走到一起,但它會教你STL以及:)

Split a string in C++?

+0

strtok不是線程安全的。 – Sardathrion

+0

如果它不足以調用嵌套循環,它絕對不是線程安全的 - 我想任何人問如何分割字符串不需要擔心複雜性:p –

+0

@ w00te strtok將無法在我的工作case ...因爲我可以輸入類似於'item =棒球棒'的信息,棒球棒必須是一個字符串,strtok會將它分成兩個字 – SNpn