strings per index zuweisen



  • Moin,

    eine wahrscheinlich für euch einfache Frage zu einem "Array":

    Ich hab mehrere Strings die sich namentlich nur durch den letzten Index unterscheiden. Nacheinander sollen diese Strings dem String test zugeordnet werden in der for-Schleife - wie muss ich das richtig deklarieren?

    string Sel1; 
    string Sel2; 
    string Sel3; 
    
    for(int i=1; i<=3; i++)
    {
       string test = Sel[i]; 
    }
    

    Gruß
    Felix



  • Das geht so nicht und das ist auch kein Array von Strings. Wenn du eines willst, dann musst du schon eines machen:

    string Sel[3]; // <- Das ist ein Array!
    
    for(int i=1; i<=3; i++)
    {
       string test = Sel[i];
    }
    

    Dazu sei erwähnt, dass du dir auch mal die Standardcontainer anschauen solltest. Siehe dazu hier. boost::array , respektive std::tr1::array wären allerdings auch Alternativen.



  • #include <string>
    #include <iostream>
    
    int main()
    {
    	std::string sel[3]; // Array mit 3 Elementen
    
    	sel[0] = "Sel Nr. 1"; // Werte zuweisen; Erstes Element hat den Index 0
    	sel[1] = "Sel Nr. 2";
    	sel[2] = "Sel Nr. 3";
    
    	for (int i = 0; i < 3; ++i)
    	{
    		std::string test = sel[i];
    
    		std::cout << test << std::endl;
    	}
    
    	return 0;
    }
    


  • Danke für deine Antwort drakon.

    Geht das auch mit den Strings über deren Namen??? Also wenn es kein Array sondern wirklich drei Strings Sel1-3 sind?



  • Nein, eher nicht. Man kann etwas mit makros basteln, dass dem ein wenig näher kommt, aber wirklich dynamisch wird das nie werden.



  • Das höchste der Gefühle ist, sie vorher in ein Array zu quetschen. Etwa

    #include <iostream>
    #include <string>
    
    int main() {
      std::string s1 = "foo";
      std::string s2 = "bar";
      std::string s3 = "baz";
    
      std::string *a[3] = { &s1, &s2, &s3 };
    
      for(int i = 0; i < 3; ++i) {
        std::cout << *a[i] << '\n';
      }
    }
    

    Über den Sinn einer solchen Konstruktion kann man aber streiten.

    Die Namen der Variablen, so wie du sie in den Quellcode schreibst, sind zur Laufzeit nicht mehr vorhanden, also kannst du auch nicht darüber auf sie zugreifen. So was geht generell nur in Skriptsprachen.



  • Es geht auch über Namen, allerdings nicht explizit über Variablennamen. std::map<std::string, std::string> bietet die Möglichkeit, strings unter bestimmten Namen abzulegen.


Anmelden zum Antworten