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.


Anmelden zum Antworten