Frage

Ich weiß, es String Tokenizer sind aber gibt es ein "int tokenizer"?

Zum Beispiel möchte ich die Zeichenfolge spalten „12 34 46“ und habe:

  

Liste [0] = 12

     

Liste [1] = 34

     

Liste [2] = 46

Insbesondere frage ich mich, ob boost :: Tokenizer dies tut. Obwohl ich keine Beispiele finden konnten, die keine Strings verwendet haben.

War es hilfreich?

Lösung

Ja, es gibt: einen Strom verwenden, z.B. ein stringstream:

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

Alternativ können Sie auch STL-Algorithmen und / oder Iterator-Adapter kombiniert mit Konstrukteure verwenden:

vector<int> list = vector<int>(istream_iterator<int>(sstr), istream_iterator<int>());

Andere Tipps

Die C ++ String-Toolkit-Bibliothek (StrTk) hat die folgende Lösung Ihrer Problem:

#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;
}

Weitere Beispiele Hier

. Hinweis: Der Parsing-Prozess ist EXTREM schnell und effizient, setzt stdlib und steigert basierte Lösungen zuzuschanden

Was Sie suchen ist 2 separate Aktionen. Zuerst die Zeichenfolge tokenize, dann konvertiert jedes Token in einen int.

ich bin nicht sicher, ob Sie diese ohne Schnur oder char tun können *, weil Sie haben aber beide Zahlen und Leerzeichen in denselben Satz ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top