2014-06-20 30 views
-6
getline(cin,s); 
istringstream iss(s); 
do 
{ 
    string sub; 
    iss>>sub; 
    q.insert(sub); 
}while(iss); 

當問題想要我在空間的基礎上拆分時,我使用了這種技術,所以任何人都可以解釋如何在有''''等特殊分隔符時進行拆分。要麼 ':'。什麼是最有效的C++方法來分裂一個字符串基於特定的分隔符類似於Python中的分裂方法?

有人告訴我有關strtok的功能,但我無法得到它的用法,所以如果有人可以幫忙,它會很好。

+1

檢查http://stackoverflow.com/a/236803/1170333 – prajmus

+2

最有效的方法是在StackOverflow中搜索此信息。以前已經回答過這個問題。 – harper

+0

最有效的方法是在Google搜索此信息。 (@harper upvoted) –

回答

11

首先,請勿使用strtok。永遠。

標準庫中沒有這個功能。 我使用類似於:

std::vector<std::string> 
split(std::string const& original, char separator) 
{ 
    std::vector<std::string> results; 
    std::string::const_iterator start = original.begin(); 
    std::string::const_iterator end = original.end(); 
    std::string::const_iterator next = std::find(start, end, separator); 
    while (next != end) { 
     results.push_back(std::string(start, next)); 
     start = next + 1; 
     next = std::find(start, end, separator); 
    } 
    results.push_back(std::string(start, next)); 
    return results; 
} 

我相信Boost有許多這樣的功能。 (我實施了 很久以前就有了Boost。)

+0

非常感謝幫助我尋找類似這樣的東西:) – vs13

+0

@ vs13如果它對您有幫助,您可能仍然無法接受此答案。點擊左邊的大白色複選標記... –

1

我在google上輸入Split C++。找點時間,:0.5秒

...

從鏈接抽放工藝

的strtok()這是舊的C庫函數。在後面的FAQ中有大量的 概述。這是一個使用它的例子。

/* This is C code */ 
#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char s[] = "one, two,, four , five,"; /* mutable! */ 
    const char* p; 

    for (p = strtok(s, ","); p; p = strtok(NULL, ",")) 
    { 
    printf("\"%s\"\n", p); 
    } 

    return 0; 
} 

通知的strtok()是怎麼太愚蠢把相鄰的分隔符爲 空場?它在最後錯過了空白的領域!

如果使用strtok(),這些問題已經無法解決。

+8

您的互聯網連接速度很慢。 – harper

+0

這實際上是答案。他詢問了如何使用strtok,這是在鏈接中解釋的,舉例 –

+6

「如何使用strtok」的唯一答案是_don't_。 –