Daten aus string herausfiltern



  • Hallo Liebe Gemeinde,

    leider stehe ich vor einem Problem, was ich bisher nicht lösen kann. Versuche nun schon seit zwei Stunden eine Lösung zu finden. 🙄 Ich hoffe, dass mir hier jemand weiter helfen kann.

    Die Aufgabe ist es, den Namen, Vornamen, Wohnort und Alter aus dem string herauszufiltern und in einer structur abzuspeichern.

    Folgendes habe ich bisher herausgefunden:

    # include <iostream>
    # include <string>
    
    using namespace std;
    
    	void programm (string Query_String)
    	{
    		int pos = 0;
    		int n=0;
    		int *a = new int [n];
    
    		do {
    
    			pos = Query_String.find('&',pos);
    
    				if (pos==string::npos)
    				{break;}
    
    				cout<<pos+1<<endl;
    
    				a[n]=pos+1;
    
    				pos++;
    				n++;
    
    		} while (1);
    
    	cout <<a[n];}
    

    Nun komme ich nicht weiter. Ich muss ja nun irgendwie die gefundenden & und = als Position Speichern und dann den Text dazwischen in einen string packen 😞



  • Du speicherst die gefundenen Werte in einem dynamisch allokierten Array der Grösse 0. Das wird wohl nicht gehen.

    string hat eine substring Funktion. Das suchst du wohl.


  • Mod

    Du schreibst hier an völlig Fremde, die keine Ahnung haben, was du überhaupt tust. Mal angenommen, jemand weiß nicht, worum es bei deinem Problem geht. Wäre er nach dem Lesen deines Beitrags klüger? Wohl kaum. Du hast irgendeine Zeichenkette, daraus willst du irgendwas herausholen, damit hast du irgendeine Schwierigkeit. Fang zum Beispiel man damit an, dein eigentliches Problem zu beschreiben, nicht, wie du es lösen möchtest. Wie sieht deine Zeichenkette aus, was möchtest du daraus holen, wo sollen die Daten hin?
    Da ich Probleme dieser Art schon kenne: Ist dein Problem wirklich, irgendwelche Daten aus einer Zeichenkette zu lesen? Oder kann es viel mehr sein, dass es da drum geht, irgendwelche Daten aus einer bestimmten Quelle zu lesen und du dachtest dir, es wäre eine gute Idee, einen Umweg über eine Zeichenkette zu machen? Wie schon gesagt: Beschreib dein eigentliches Problem, nicht wie du dir die Lösung vorstellst.



  • Mh, sry. Habe auch die main vergessen.

    Also das Problem ist, dass ich aus diesem string
    Tom, Meier, Berlin, 28
    herausfiltern möchte. Die Reihenfolge der Substrings sollen sich in dem string aber ändern dürfen

    void main ()
    
    {
    	string query_string = ("Name=Mueller&Vorname=Tom&Wohnort=Berlin&Alter=28&");
    
    	programm("Name=Mueller&Vorname=Tom&Wohnort=Berlin&Alter=28&");
    
    }
    


  • Wahrscheinlich will Melanie_194 HTTP POST data finden.

    Ersetze pos mit left und right und benutze dann substring für '&'.
    Danach genauso mit '='.

    Vergiss int *a.



  • Danke für deine Antwort,

    Wie verwerte ich das Ganze denn dann und was mache ich, wenn es eine andere Reihenfolge gibt...:(

    Vielen lieben Dank



  • Wäre sehr dankbar für einen Tipp... Ich verzweifel langsam 😕 😞



  • void FindValues()
    {
    string line = "Name=Mueller&Vorname=Tom&Wohnort=Berlin&Alter=28&";
    size_t left = 0;
    size_t right = 0;
    
    	while( (right = line.find( '&', left )) != string::npos )
    	{
    		string var;
    		var = line.substr( left, right - left );
    		size_t equals;
    		if( (equals = var.find( '=' )) != string::npos )
    		{
    			string vname = var.substr( 0, equals );
    			string vvalue = var.substr( equals+1 );
    			cout << vname << ':' << vvalue << endl;
    		}
    		left = ++right;
    	}
    
    	if( left < line.size() )
    	{
    		string var;
    		var = line.substr( left );
    		size_t equals;
    		if( (equals = var.find( '=' )) != string::npos )
    		{
    			string vname = var.substr( 0, equals );
    			string vvalue = var.substr( equals+1 );
    			cout << vname << ':' << vvalue << endl;
    		}
    	}
    }
    


  • #include <map>
    #include <sstream> // istringstream 
    #include <string>
    #include <iostream>
    
    int main()
    {
        using namespace std;
    
        // Reihenfolge der Einträge in 'query_string' ist egal
        string query_string = ("Name=Mueller&Vorname=Tom&Wohnort=Berlin&Alter=28&");
        map< string, string > variablen;
        istringstream in( query_string );
        for( pair< string, string > v; getline( getline( in, v.first, '=' ), v.second, '&' );  )
            variablen.insert( v );
    
        cout << "Name: " << variablen["Name"] << endl; 
        cout << "Alter: " << variablen["Alter"] << endl;
    }
    

Anmelden zum Antworten