空白と句読点を含むC++を使用して文字列を分割したいと考えています。スペースと句読点を含むC++分割文字列
str = "This is a dog; A very good one."
は私が取得したい「これ」「」「」「犬」「A」「とても」「良い」「1」1 1.
によっては、それはのgetlineを使用して区切り一つだけと非常に簡単ですですしかし、私はすべての区切り文字を知っているわけではありません。任意の句読記号を使用できます。
注:私はブーストを使用したくありません!
空白と句読点を含むC++を使用して文字列を分割したいと考えています。スペースと句読点を含むC++分割文字列
str = "This is a dog; A very good one."
は私が取得したい「これ」「」「」「犬」「A」「とても」「良い」「1」1 1.
によっては、それはのgetlineを使用して区切り一つだけと非常に簡単ですですしかし、私はすべての区切り文字を知っているわけではありません。任意の句読記号を使用できます。
注:私はブーストを使用したくありません!
を私はこれが最善の方法であると主張していないんだけど、それが動作します。
auto it = std::find_if(str.begin(), str.end(), [] (const char element) -> bool {
return std::isspace(element) || std::ispunct(element);})
したがって、最初の位置から始めて、最初の有効なトークンを見つけます。あなたは、その後、あなたの文字列を切り捨てるそして、あなたはあなたが行うことができますので
delimIndex = str.substr (index).find_first_of (yourDelimiters);
あなたの最初の言葉は、その後
なり、この後の最初の区切り文字を見つける必要があり
index = str.find_first_not_of (yourDelimiters);
を使用することができます繰り返してください。もちろん、find_first_not_ofとfind_first_of return nposのすべてのケースを処理する必要があります。これは文字が見つからなかったことを意味しますが、これで十分です。
ところで、区切り文字を見つけるために、ラムダを使用std::find_if()
...
彼は知らないデリミタとしては何でしょうか。 –
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後に変更されます。
幸運:)
あなたはすべての文字を知っていますか?あなたが手紙ではないものを見つけたら、区切り文字と見なしてください。 –
[C++で文字列をどのようにトークン化するのですか?](http://stackoverflow.com/questions/53849/how-do-i-tokenize-a-string-in-c) –