Zeichen an einer bestimmten stelle in einem String auslesen [Anfänger]



  • Soweit ich weis nimmt nur Delphi diese zeichen

    ''
    

    oder nicht?

    if (TF_Eingabe->Text[i] == ','
    

    diese Lösung hat jedenfalls nicht funktioniert aber trotzdem danke an Powerpaule 🙂 👍

    ich hoffe mir kann trotzdem jemand weiterhelfen 😕

    mfg Zuluhutu



  • for (i = 0; i == TF_Eingabe->Text.Length(); i++) 
        { 
            if (TF_Eingabe->Text[i] == ",") 
            { 
                Fehler = true; 
            } 
        } 
        if (Fehler != true) 
        { 
            TF_Eingabe->Text = TF_Eingabe->Text + ","; 
        } 
        else ShowMessage("Es kann kein zweites Komma gesetzt werden!"); 
    }
    

    Der AnsiString beginnt grundsätzlich mit dem Index 1 und nicht wie std::string bei 0. Außerdem bietet auch der AnsiString die Methode SubStr um auf einzelne Zeichen zuzugreifen.
    Und der AnsiString bietet sogar noch die Methode "Pos" an. Mit der kann man auf das erste Vorkommen eines bestimmten Zeichens bzw. Zeichenfolge prüfen.

    if(Eingabe->Text.Pos(",") > 0)
       {
          ShowMessage("Es kann kein zweites Komma gesetzt werden!");
       }
    


  • "Funktioniert nicht" ist nicht aussagekräftig genug.
    Deine ursprüngliche Fehlermeldung sollte jedenfalls mit Paules Hinweis behoben sein.

    Beachte ausserdem, dass bei AnsiString der Index nicht bei 0 sondern bei 1 beginnt.

    /Edit: Ähh ja, genau. 🙂



  • 1000 Dank an AnsiStr für diese Lösung 😃

    if(Eingabe->Text.Pos(",") > 0)
       {
          ShowMessage("Es kann kein zweites Komma gesetzt werden!");
       }
    

    nun läufts 👍

    mfg Zuluhutu



  • hätte man das nicht auch einfach mit:
    String.substr(int,int) machen können ist doch viel einfacher



  • damit kannste aber nicht überprüfen ob ein "," irgendwo ist.

    greetz KN4CK3R



  • Natürlich.

    int size;
    int i;
    std::string teil;
    std::string text;
    text = Label1->Caption.c_str();
    size = text.size();
    while (i<size)
    {
         i++
         teil = text.substr(i-1,1);
         if (teil == ",")
         {
           break;
         }
    }
    

    vielleicht nicht elegant, aber es geht und ist unkompliziert.



  • also .Pos() sieht für mich einfacher aus...

    greetz KN4CK3R



  • Tim06TR schrieb:

    Natürlich.

    int size;
    int i;
    std::string teil;
    std::string text;
    text = Label1->Caption.c_str();
    size = text.size();
    while (i<size)
    {
         i++
         teil = text.substr(i-1,1);
         if (teil == ",")
         {
           break;
         }
    }
    

    vielleicht nicht elegant, aber es geht und ist unkompliziert.

    Es ist nicht nur nicht elegant. Es ist komplizierter Code.(nicht vom Verständniss her :D)
    Die AnsiString Methode Pos erledigt genau das was gebraucht wird. Die
    Suche im String.
    Und für std::string gibt es find ... 🙄



  • Hallo

    Zumal man nicht substr braucht um auf ein einzelnes Zeichen eines Strings zurückzugreifen. Denn deine Schleife greift ja auch nur auf ein Zeichen pro Durchgang zurück, da reicht es den []-Operator zu benutzen und das Ergebnis als char und nicht als char* zu betrachten.

    bis bald
    akari



  • Beispiel zu akari's Einwand:

    for(int i= TF_Eingabe->Text.Length(); i > 0; i--){
        if(TF_Eingabe->Text->Caption[i] == ','){
            ShowMessage("Es kann kein zweites Komma gesetzt werden!");
            return;                                                    // Click-Methode wird sofort verlassen, weitere Verarbeitung entfällt
        }
    }
    TF_Eingabe->Text= TF_Eingabe->Text + ",";
    

    MfG


Anmelden zum Antworten