C/C++ Programmierung

Aufgabe 37

Es wird eine Textzeile von der Tastatur eingelsen. Das Programm zerlegt den Satz in seine einzelnen Worte und gibt jedes auf einer eigenen Zeile aus. Satzzeichen werden ignoriert. Zum Schluß wird die Anzahl der Worte ausgegeben.
     Bitte eine Textzeile eingeben:
     Aha, so geht das also!
     Aha
     so
     geht
     das
     also
     Es wurden 5 Worte eingelesen.

Versuchen Sie zunächst nur Sätze mit Großbuchstaben zu erkennen, dann erweitern Sie das Programm auch auf Kleinbuchstaben.

Tipp: Schreiben Sie zunächst eine Funktion, die prüft, ob ein einzelnes Zeichen ein Buchstabe ist oder nicht.

Alle unterstrichenen Stellen bei der Aufgabe sind Eingaben, die der Benutzer durchführen soll.

Lösung für die Aufgabe

#include <fstream.h>
#include <string.h>

// Funktion zum Prüfen auf einen Buchstaben
bool ischar(char zeichen)
{
  if (zeichen >= 'a' && zeichen <= 'z' ||
    zeichen >= 'A' && zeichen <= 'Z' ||
// Die nächste Zeile einbinden, falls auch Zahlen erkannt werden sollen
//    zeichen >= '0' && zeichen <= '9' ||
    zeichen >= (char)192 && zeichen <= (char)214 ||
    zeichen >= (char)216 && zeichen <= (char)246 ||
    zeichen >= (char)248 && zeichen <= (char)255)
    return true;

  return false;
}

// Start des Hauptprogrammes
main()
{
  // Konstante für die maximale Anzahl von Zeichen definieren
  const int MAX_ZEICHEN = 100;

  // Variable deklarieren
  char text[MAX_ZEICHEN]; // Variable für die Textzeile
  int  worte = 0;         // Variable für die Anzahl der Worte

  // Die Textzeile einlesen
  cout << "Bitte eine Textzeile eingeben: ";
  cin.getline(text, MAX_ZEICHEN);

  // Worte in Textzeile zählen und ausgeben
  bool letztes_zeichen = false; // Variable um festzustellen ob das letzte
                                // Zeichen ein Buchstabe war.

  for (int i = 0; i < strlen(text); i++)
  {
    if (ischar(text[i]))
    {
      cout << text[i];        // Zeichen ausgeben
      letztes_zeichen = true; // letztes_zeichen auf true setzen
    }
    else
    {
      if (letztes_zeichen) // war Zeichen zuvor ein Buchstabe?
      {
        cout << endl;
        worte++;      // Zähler für Worte um eins erhöhen
      }

      letztes_zeichen = false; // letztes_zeichen auf false setzen
    }
  }

  if (letztes_zeichen) // war Zeichen zuvor ein Buchstabe?
  {
    cout << endl;
    worte++;      // Zähler für Worte um eins erhöhen
  }

  cout << "Es wurden " << worte << " Worte eingelesen." << endl;
}


Zurück zur Übersicht