15

文字列トークナイザーがあることは知っていますが、「int トークナイザー」はありますか?

たとえば、文字列「12 34 46」を分割し、次のようにします。

リスト[0]=12

リスト[1]=34

リスト[2]=46

特に、Boost::Tokenizer がこれを行うかどうか疑問に思っています。文字列を使用していない例は見つかりませんでしたが。

4

4 に答える 4

14

C++ String Toolkit Library (StrTk)には、問題に対する次の解決策があります。

#include <string>
#include <deque>
#include "strtk.hpp"

int main()
{ 
   {
      std::string data = "12 34 46";
      std::deque<int> int_list;
      strtk::parse(data," ",int_list);
   }

   {
      std::string data = "12.12,34.34|46.46 58.58";
      std::deque<double> double_list;
      strtk::parse(data," ,|",double_list);
   }

   return 0;
}

その他の例はここにあります

注: 解析プロセスは非常に高速で効率的であり、stdlib および boost ベースのソリューションを圧倒します。

于 2011-01-13T06:54:29.543 に答える
12

はい、あります:ストリームを使用します。例stringstream::

stringstream sstr("12 34 46");
int i;
while (sstr >> i)
    list.push_back(i);

または、コンストラクターと組み合わせてSTLアルゴリズムやイテレーターアダプターを使用することもできます。

vector<int> list = vector<int>(istream_iterator<int>(sstr), istream_iterator<int>());
于 2009-07-17T06:59:24.547 に答える
0

あなたが探しているのは、2つの別々のアクションです。最初に文字列をトークン化し、次に各トークンを int に変換します。

于 2009-07-17T06:58:29.057 に答える
0

string または char* を使用せずにこれを実行できるかどうかはわかりません。数字とスペースの両方を同じセットにする必要があるためです...

于 2009-07-17T06:58:39.570 に答える