Denkfehler bei length



  • Hallo liebe com,

    ich bin seit gestern dabei ein wenig mit length zu spielen, leider läuft der nicht wirklich nach meiner Logik, wo ist mein Fehler???

    int main ()
    {
      string str ("Test string");
      for (int i = str.length() ; i>=0 ;i--)
      {
        //cout<<i<<"\n"; char c = str[i];
    
       if (str[i]==str[6])
       {
        cout<<str[6];
       }
       else
       {
    
       }
      }
       int i=0;
      cin>>i;
      return 0;
    }
    

    Also er ginbt mir nun "tt" aus, wie kann denn das sein wenn ich nur sage er soll was ausgeben wenn er im Index 6 hat???

    Danke für Hilfe

    LG Sam



  • Strings fangen bei Index 0 an, das letzte Zeichen ist bei Index length()-1.



  • hm, ok, wieso erhalte ich dann gleich zwei t??? selbst wenn ich

    if (str[i]==str[0])
    

    mach bekomme ich 1 t raus(was ja eigentlich stimmen müsste, da der erste Buchstabe ein t ist), wenn ich mir alle Zeichen aufliste, dann sind es jedoch 11 also stimmt das, es geht von Index [0]-[11] !!!

    Edit:

    Merkwürdig ist, wenn ich in der if str[1] mache, dann gibt er mir nen "e" raus, mache ich ne [2] dann gibt er mir "ss" aus???



  • samkirchner schrieb:

    mach bekomme ich 1 t raus(was ja eigentlich stimmen müsste, da der erste Buchstabe ein t ist), wenn ich mir alle Zeichen aufliste, dann sind es jedoch 11 also stimmt das, es geht von Index [0]-[11] !!!

    Nein, die gültigen Indizes sind 0 bis einschließlich 10. Der Index 11 ist schon außerhalb des Strings.

    samkirchner schrieb:

    hm, ok, wieso erhalte ich dann gleich zwei t???

    if(str[i]==str[6])
    

    ist nicht das gleiche wie das, was du im Fließtext beschreibst:

    samkirchner schrieb:

    wenn ich nur sage er soll was ausgeben wenn er im Index 6 hat???

    würde ich lesen als

    if(i == 6)
    


  • aha, nun geht es, Danke!

    Nun noch ne letzte Frage zu length, dann habe ich des glaub begriffen 😉

    Wenn ich nach dem Leerzeichen suchen will, wie stelle ich das dann an? z.B er soll suchen bis er zu dem Leerzeichen kommt und mir dann den Index rausgeben!

    Danke für die Hilfen !!!



  • Versuchs mal mit

    size_t pos = str.find(" ");
    if(pos != str.npos) ...
    

    pos gibt dir nun den Index von " " an, aber nur wenn er eins findet

    Gruß Simon



  • Super, vielen vielen Dank an alle Helfer 👍



  • Du kannst übrigens das else hier weglassen!

    lg, freakC++


Anmelden zum Antworten