String mit haufenweise Ints auseinander nehmen.
-
Hi,
ich habe einen string der sieht so aus:
0,0,0,2,2,2,555,1,0,54,9,7,0
nun jetzt möchte ich eine Funktion schreiben, die mir einen vector mit genau diesen werten zurück gibt.
nur ich weis net wie man einen string parsen kann
-
Was genau weißt du denn dabei nicht?
Du mußt einfach den String analysieren. Wo sind die Komma-Positionen? Dann schneid dir substrings aus dem String raus je nach dem wo die Kommas sind. Jeder Substring ist dann nur noch eine Zeichenkette aus Ziffern: zum Beispiel "123". Dann kannnst du die "123" in einen int umwandeln ( atoi() etc.) und an einen vector<int> anhängen
-
Hab den code eben im netz Gefunden:
#include <iostream> #include <vector> #include <string> using namespace std; void explode(vector<int> &v,const string &s,const char &sep) { int pos=0; do v.push_back(s.substr(pos,s.find(sep,pos)-pos)); while((++pos+=static_cast<int>(v[v.size()-1].length())) && pos < static_cast<int>(s.length())); } int main () { std::string Test = "0,1,2,3,4"; std::vector <int> Bla; explode (Bla, Test, ','); for (int i=0; i<static_cast<int>(Bla.size()); ++i) cout << Bla[i] << endl; cout << static_cast<unsigned int>(Bla.size()); }
doch der Compiliert net der sagt da wären fehler
-
std::strings gehen halt nicht in einen std::vector<int> rein
-
void explode(vector<int> &v,const string &str,const char &sep) { int Pos=0; std::string::size_type Pos1=0; std::string::size_type Pos2=0; while((Pos2=str.find(sep, Pos1))!= std::string::npos) { v.push_back(std::atoi(str.substr(Pos1, Pos2 - Pos1).c_str())); ++Pos; ++Pos2; Pos1 = Pos2; } v.push_back(std::atoi(str.substr(Pos1, Pos2 - Pos1).c_str())); }
Vielleicht könnte es so funktionieren, ist aber nur ein grober Entwurf, also nicht meckern
-
Hi,
danke die Funktion funktioniert PERFEKT kann man die noch optimieren?
-
=Seraph= schrieb:
Hi,
danke die Funktion funktioniert PERFEKT kann man die noch optimieren?Ja, und zwar ordentlich.
Das kannst aber du uebernehmen, sonst wird dir noch fad.