wie geht das??? lehrzeichen komprimieren



  • Schreiben Sie ein Programm, welches solange Zeichen aus dem Standardeingabestrom entnimmt, wie das Dateiende noch nicht erreicht ist. Wird das Dateiende erreicht, wird das betreffende Stromobjekt nach false umgewandelt. Nur wenn es nicht zutrifft, dass das zuvor und das aktuell gelesene Zeichen Leerzeichen sind, soll das aktuelle Zeichen ausgegeben werden. Ansonsten wird nichts ausgegeben.

    2 Leerzeichen und 5 Leerzeichen

    Dann ergibt sich folgender Beispieldialog:

    2 Leerzeichen und 5 Leerzeichen

    Wie geht das???



  • Kannst Du die Datei zeichenweise ausgeben lassen? Prima!
    Nächster Schritt: merk Dir immer das zuletzt gelesene Zeichen.
    Dann machste ne Abfrage, ob es ein Leerzeichen ist und das aktuelle Zeichen auch. Falls ja: nix tun, sonst: Zeichen ausgeben.

    Nicht vergessen das zuletzt gelesene Zeichen upzudaten.

    Viel Erfolg!
    Jester



  • #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main() {
      char c;
      while (cin.get(c))
       { if ( c == 32) cout << c << "\b";
         else cout << c; }
      system("PAUSE");	
      return 0;
    }
    

    löscht jetzt aber alle lehrzeichen soll das nur machen wenn es 2 oder mehr sind.
    stehe echt auf dem schlauch so billig aber für mich heut so schwer....



  • das ist schonmal ein ganz guter Anfang. Aber wenn Du sowieso mit \b löschst brauchste das Zeichen auch garnicht ausgeben.

    Jetzt bau mal noch ne Variable ein, die immer das zuletzt gelesene Zeichen enthält.

    Und dann bauste noch ne Funktion bool beidesLeerzeichen(char c1, char c2) die true zurückgibt, wenn beides ein Leerzeichen ist. Die rufste dann im if einfach auf.

    MfG Jester



  • das mit der Function klingt zwar ganz gut aber das programmieren von Funktionen hab ich noch nicht gelernt.



  • Dann mußte den Code halt ins if reinschreiben.

    Leg doch erstmal ne Variable lastChar an, in der im vorigen Schleifendurchlauf gelesene Wert steht.

    MfG Jester



  • #include <iostream> 
    #include <cstdlib> 
    
    using namespace std; 
    bool bIstLeerzeichen(char a, char b)
    {
    	if(a==' ' && b== ' ')
    	return false;
    	else return true;
    }
    int main() { 
      char c,b; 
      while (cin.get(c)) 
       { if (!bIstLeerzeichen(c,b))
    		cout<<c<<"\b";
         else cout << c; } 
      system("PAUSE");    
      return 0; 
    }
    

    ich hab das auch mal probiert, geht aber irgendwie nicht!



  • Jetzt schmeiß doch mal dieses dusslige cout << c << "\b" raus. Da kannste genausogut garnix machen: {}

    Zum anderen: Du vergißt den letzten Wert upzudaten. Du mußt den natürlich noch setzen, damit er in jedem Schleifendurchlauf der letzte Wert ist.

    MfG Jester


Anmelden zum Antworten