我想分割一個字符串使用包含空格和標點的C++。C++分割字符串,空格和標點符號
例如str = "This is a dog; A very good one."
我想要得到的「這」「是」「一」「狗」「A」「非常」「好」「」 1加1
一個它只有一個很簡單的分隔符使用函數getline但我不知道所有的分隔符。它可以是任何標點符號。
注意:我不想使用Boost!
我想分割一個字符串使用包含空格和標點的C++。C++分割字符串,空格和標點符號
例如str = "This is a dog; A very good one."
我想要得到的「這」「是」「一」「狗」「A」「非常」「好」「」 1加1
一個它只有一個很簡單的分隔符使用函數getline但我不知道所有的分隔符。它可以是任何標點符號。
注意:我不想使用Boost!
使用std::find_if()
與拉姆達找到的分隔符。
auto it = std::find_if(str.begin(), str.end(), [] (const char element) -> bool {
return std::isspace(element) || std::ispunct(element);})
因此,從第一個位置開始,您會找到第一個有效的標記。您可以使用
index = str.find_first_not_of (yourDelimiters);
然後你必須找到在此之後的第一個分隔符,所以你可以做
delimIndex = str.substr (index).find_first_of (yourDelimiters);
那麼你的第一個字是
然後刪掉你的字符串並重復。當然,您必須處理find_first_not_of和find_first_of返回npos的所有情況,這意味着該字符未找到,但我認爲這足以開始。
順便說一句,我並不是說這是最好的方法,但它的工作原理...
他不知道什麼將作爲分隔符。 – 2012-02-17 18:34:14
vmpstr的解決方案的工作原理,但可能有點乏味。幾個月前,我寫了一個C庫,可以做你想做的。 http://wiki.gosub100.com/doku.php?id=librerias:c:cadenas
資料已寫入西班牙文(對不起)。
它不需要外部依賴。嘗試使用splitWithChar()函數。使用的
實施例:
#include "string_functions.h"
int main(void){
char yourString[]= "This is a dog; A very good one.";
char* elementsArray[8];
int nElements;
int i;
/*------------------------------------------------------------*/
printf("Character split test:\n");
printf("Base String: %s\n",yourString);
nElements = splitWithChar(yourString, ' ', elementsArray);
printf("Found %d element.\n", nElements);
for (i=0;i<nElements;i++){
printf ("Element %d: %s\n", i, elementsArray[i]);
}
return 0;
}
原始字符串 「yourString」 被使用後spliWithChar()修改,所以要小心。
祝你好運:)
你知道所有的字母,對嗎?因此,如果您發現任何不是字母的內容,請將其視爲分隔符。 – 2012-02-17 18:32:19
可能的重複[如何在C++中標記字符串?](http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) – 2012-02-17 19:05:51