kleines Problem mit Stringende



  • Hi,

    ich habe mir folgende Funktion geschrieben.

    void delblanks(char* text)
    {
    int i,x;
              for (i=0 , x=0 ; i < (unsigned char)strlen(text); i++)
                     {
                      if (text[i] != ' ')
                        {
                         text[x] = tolower((unsigned char)text[i]);
                         x++;
                        }
                     }
    
         return;
    }
    

    Die Funktion löscht mir alle Blanks und schreibt alles in Kleinbuchstaben.
    Soweit so gut.
    Wenn ich aber aus einer Datei die letzte Zeile lese dann hat der String den ich lese kein "\n" neue Zeile bzw. kein "\0" Zeilenende(Stringende) - Zeichen.
    Meine Funktion löscht nun die Leerzeichen... kann aber das String-Endezeichen nicht mit nach vorne kopieren weil es nicht da ist.

    Somit wird aus "123 = 45" -> "123=4545" wie kann ich das Problem umgehen ?

    Danke
    worst_case

    PS: Ich könnte natürlich den String erst einmal umkopieren...dann würde das "\0" automatisch mit angefügt.... ist denke ich nicht die ideale Lösung



  • Hallo,

    sollte nicht so lange vor der Kiste sitzen....alles nur Bockmist.

    So geht es jetzt, aber ist das auch richtig ?

    void delblanks(char* text)
    {
    int i,x;
    
              for (i=0 , x=0 ; i < (unsigned char)strlen(text) + 1; i++)
                     {
                      if (text[i] != ' ' && text[i] != '\n')
                        {
                         text[x] = tolower((unsigned char)text[i]);
                         x++;
                        }
                     }
    
         return;
    }
    

    Danke
    worst_case



  • QUARKS...

    Ich sollte auch nicht mehr so lange vor dem Rechner sitzen... 🙂



  • Warum castest du den Rueckgabewert von strlen() in einen unsigned char?

    Ich wuerde es so machen:

    char* strip_blanks(char* str)
    {
      int len=strlen(str), x=0;
      for(int i=0; i<len; ++i)
      {
        if(!isspace((unsigned char)str[i]))
        {
          str[x++]=tolower((unsigned char)str[i]);
        }
      }
      str[x]=0;
      return str;
    }
    


  • Shade, zuviel C++ tut dir erkennbar nicht gut ;). "for (int i = 0; str[i]; ++i)" reicht doch absolut. Wieso zweimal durch den String rennen?



  • Daniel E. schrieb:

    Wieso zweimal durch den String rennen?

    Damit dem Prozessor nicht fad wird 🙂
    Ne, sorry. Daran hatte ich nicht gedacht 😞


Anmelden zum Antworten