Anzahl der Values aus einer Kommaliste ermitteln



  • Hallo,

    ich müsste die Anzahl der Inhalte einer Kommaliste(9 Werte) ermitteln um dann mit einer if-Abfrage zu prüfen, ob eingelesene Liste auch tatsächlich 9 Werte hat.

    Könnte das so funktionieren:

    if(StrList.size()<=6)

    Da ich im Gesamtcode noch einen anderen Fehler habe, kann ich nicht schauen, ob das so funktioniert.

    Würde mir reiche, wenn ihr mir bestätigt, dass das theoretisch so hinhauen müsste.

    Vielen Dank!

    Gruss, Tamara



  • Tamara schrieb:

    ...

    Würdest du wenigstens noch Angaben zu den Typen etc. Machen? Eine Kommaliste existiert in C++ nicht, also welche Typen verwendest du etc.

    Wenn es ein Kommaseparierter String ist wird dir ein Größenvergleich garnichts helfen (Da die Werte ja theoretisch, genauere Informationen fehlen aber, unterschiedliche Längen haben).

    cu André



  • es ist eine Liste aus strings

    also z.B. folgendes

    Liste1 = a,b,,c,d,,zb,z,,

    die Liste besteht aus 9 Stringwerten. Also der Inhalt zwischen den Kommas.
    Vielleicht anders formuliert: Wie kriege ich die Anzahl der Kommas raus.
    Es sollen nicht alle Zeichen gezählt werden, sondern nur die Anzahl der Inhalte an sich.

    Weisst du was ich meine?



  • string str_list="a,b,,c,d,,zb,z,,"
    int n=0;
    for (int i=0; i<str_list.size(); i++) 
    {
        if (str[i]==',') n++;
    }
    cout << n << "Werte in der Liste. << endl;
    


  • Tamara schrieb:

    Liste1 = a,b,,c,d,,zb,z,,

    Meine Güte, kannst Du nicht einfach mal schreiben, was Liste1 für einen Typ hat, und wie Du Liste1 im Programm füllst? Das da oben nur dann gültiges C++, wenn Liste1 bereits definiert (falls das der Fall ist, dann schreib uns, wie!) und a, b, c, d, zb und z Variablen vom selben oder einem konvertierbaren Typ (auch hier: welcher?) sind.

    Weisst du was ich meine?

    Woher denn bitte?!



  • Okay, irgendwie hatte ich einen Denkfehler. Hier mein Vorschlag, wie ich den Inhalt zwischen den Kommas extrahieren kann.
    Wie zähle ich die einzelnen "Positionen" aber. Mit nem Counter?
    Wo kan ich den einsetzten?

    void Inhalte(string values)
    {
    	string valueinhalt;
    	int Komma_position_laufend=0;
    	int Komma_position_vorher=-1;
    	int first=0;
    	int last=0;
    	int length=0;
    
    	// Schleife um jeden Inhalt extrahieren zu können
    	while (Komma_position_laufend>=0)
    	{
    		// Suche nach dem Komma in der Liste
        Komma_position_laufend = (int)values.find(",",Komma_position_vorher+1);
    
    		// Hier dann Abstände zwischen dem 1. und folgenden Komma
                      // finden, und die Länge voneinander abziehen. +1 damit man
    		// dann den Inhalt extrahieren kann 
    
    		first = comma_pos_prev+1;
    		if (Komma_position_laufend>=0)
    			last = Komma_position_laufend-1;
    		else
    			last = (int)values.length()-1;
    		length = last-first+1;
    
    		// Prüfen, ob die Länge positiv ist, denn nur dann habe ich 
                      // auch einen Inhalt zwischen den Kommas
    
    		if (length>0)
    		{
    			valueinhalt= values.substr(first,length);
    
    		}	
    		// Kommas gleichsetzten und wieder hoch zur Schleife.
    		Komma_position_vorher = Komma_position_laufend;
    
    	}
    }
    


  • @mschulz: Das klingt gut, das versuche ich mal 🙂 thanx a lot.
    @lordJaxom: Ich versuche mal das von mschulz. Falls das nicht funktioniert,
    melde ich mich nochmal und werde dann alle nötigen Infos hier schreiben.

    LG, Tamara 🙂



  • Die std::string -Funktionen find() und substr() vereinfachen übrigens einiges. Um nur Kommas zu zählen, kannst du auch den STL-Algorithmus std::count() nehmen.


Anmelden zum Antworten