kramann.info
© Guido Kramann

Login: Passwort:










Informatik3
1 Vom_struct_zur_Klasse
..1.1 Vom_struct_zur_Klasse
..1.2 struct_Programm
..1.3 Klassen_Programm
..1.4 Offene_Fragen
..1.5 Historie
..1.6 Objektabstraktion
..1.7 OO_Kundenverwaltung
..1.8 Objektfaehigkeiten
..1.9 Formatierung
..1.10 Motivation
..1.11 Uebung1
..1.12 Uebung2
2 UML
..2.1 Volumenberechnung
..2.2 UML_Klassendiagramm
..2.3 Konstruktor
..2.4 Statische_Variable
3 Strings
..3.1 Klassenbibliotheken
..3.2 stringUML
..3.3 Uebung3
4 Initialisierungen
4 bluej
5 Zeiger_und_Arrays
..5.1 Zeiger
..5.2 Zeiger_und_Funktion
..5.3 Uebung4
6 Vererbung
..6.1 MesswerteUML
..6.2 MesswerteProgramm
..6.3 VererbungsProgramm
..6.4 Vector
..6.5 Uebung
7 Modifikatoren
..7.1 public_Vererbung
..7.2 protected_Vererbung
8 Listen_und_Templates
..8.1 Containertypen
....8.1.1 ListeUML
....8.1.2 ListeProgramm
..8.2 Templates
....8.2.1 Listentemplate
....8.2.2 STLvectorTemplate
..8.3 Uebung5
..8.4 Uebung6
..8.5 Uebung7
9 Java
..9.1 Uebung
..9.2 GettingStarted
..9.3 Animation
..9.4 Hybrid
..9.5 Threads
10 Delegation
11 LayoutProjekt
12 Fenster
13 Uebung
14 Zwischenprojekt
..14.1 Befehle
..14.2 Planung
..14.3 JNI
..14.4 JNIumsetzen
..14.5 Anwendungsklasse
..14.6 GUI01
..14.7 GUI02
15 Rasterlayout
..15.1 Bilder_Packages
..15.2 interfaces
..15.3 ArrayList
..15.4 clone
..15.5 Uebung
16 Nuetzliches
..16.1 Threads
..16.2 Animation
..16.3 RungeKutta
..16.4 Loesungsansatz
..16.5 Internetprogrammierung
....16.5.1 Codegenerierung
....16.5.2 PHP_Programmierung
....16.5.3 PHP_OOP
....16.5.4 Java
17 Algorithmen
..17.1 RungeKutta
..17.2 Loesungsansatz
..17.3 Evoopt
..17.4 Uebung12
..17.5 Uebung8_2014
..17.6 Ausdruecke
18 Uebung10
19 UML_ALT
..19.1 Flaechenberechnung
..19.2 UML_Flaechenberechnung
..19.3 Implementierung
..19.4 ListeUML
..19.5 ListenImplementierung
..19.6 Anwendung

19.6 Programm um Texte in Wörter zu zerlegen unter Verwendung der Klassen string und ListenContainer

Schauen wir uns zunächst zerlegetext_neu.cpp an, und versuchen zu verstehen, wie dort ein Objekt der Klasse ContainerListe benutzt wird:

#include <string>
#include <iostream>

#include "Liste.h"
#include "ListenContainer.h"

using namespace std;

bool istTrennzeichen(char zeichen, string trennzeichen)
{
    for(int i=0;i<trennzeichen.size();i++)
    {
        if(zeichen == trennzeichen.at(i))
            return true;
    }
    return false;
}


void zerlegeText(ListenContainer* mLC,string text,string trennzeichen)
{
    int wortbeginn = 0;
    int wortende   = 0;

    for(int i=0;i<text.size();i++)
    {
        if(  !istTrennzeichen(text.at(i),trennzeichen) )
        {
            wortbeginn = i;
            while( i+1<text.size() && !istTrennzeichen(text.at(i+1),trennzeichen) )
                i++;

            wortende = i;
            mLC->append(text.substr(wortbeginn,wortende-wortbeginn+1));            
        }
    }
}


int main(void)
{

    string text = "Das ist ein Text.";        
    string trennzeichen = ".,;: ";
    ListenContainer mLC;

//einige Tests vorab:
    mLC.append("Test0");
    mLC.append("Test1");
    mLC.append("Test2");
    mLC.del(1);
    cout<<"GROESSE der Liste="<<mLC.getSize()<<endl;
    cout<<"Wort Nr."<<1<<":"<<mLC.get(1)<<endl;   
    mLC.clear(); 
//einige Tests vorab: ENDE

    zerlegeText(&mLC,text,trennzeichen);

    cout<<"GROESSE der Liste="<<mLC.getSize()<<endl;

    for(int i=0;i<mLC.getSize();i++)
        cout<<"Wort Nr."<<i<<":"<<mLC.get(i)<<endl;    


}
 

Code 19.6-1: zerlegetext_neu.cpp

zerlegetext_neu.cpp und .h-Dateien gezipt
Aufgabe der Funktion zerlegeText()

Der Funktion int zerlegeText(ListenContainer* mLC,string text,string trennzeichen) wird das string-Objekt text übergeben. Dieses soll in Wörter zerlegt werden. trennzeichen enthält alle Zeichen, die als Trenner zwischen den Wörtern erlaubt sind und die nicht in den Wörtern vorkommen dürfen. Schliesslich wird der Funktion ein Zeiger auf ein ListenContainer-Objekt mit dem Bezeichner mLC übergeben. In diesem Objekt sollen die Ergebnisse, also die einzelnen Wörter abgelegt werden.

Aufgabe der Funktion istTrennzeichen()

Der Funktion bool istTrennzeichen(char zeichen, string trennzeichen) ist eine Hilffunktion von zerlegeText(). Sie liefert true zurück, wenn der übergebene Buchstabe einer der in dem übergeben String enthaltenen Trennzeichen entspricht, und ansonsten false.

Aufgabe der main-Methode

Nach einem Test eines ListenContainer-Objekts, wird die Funktion zerlegeText() in der main-Methode getestet. Die main-Methode erzeugt ein Objekt mit dem Beispieltext, eines mit den Trennzeichen und ein ListenContainer-Objekt, in dem die Ergebnisse gespeichert werden können, um die Funktion zerlegeText() anschliessend aufzurufen.

Ablauf der Textzerlegung in der Funktion zerlegeText()

Das Zerlegen des Textes funktioniert nun in folgender Weise:

  • Die for-Schleife geht Buchstabe für Buchstabe des Textes durch, bis sie am Ende des Textes ankommt. (Die Größe des Textes ist dabei über die String-Methode size() verfügbar.)
  • Wenn ein Zeichen gefunden wird, das kein Trennzeichen ist (s. if-Anweisung), dann wird das Durchgehen der Buchstaben unterbrochen und ...
  • ...Es wird der Beginn des neuen gefundenen Wortes gemerkt.
  • ...Es wird nach dem nächsten Auftreten eines Trennzeichens gesucht, oder des Textendes, um das Ende des Wortes zu finden
  • ...Das Wort wird aus dem String mit Hilfe der Methode substr() herausgeschnitten
  • ...Die Anzahl der gefundenen Wörter wird um eins erhöht
  • ...Der Zähler der for-Schleife wird auf das Ende des gerade gefundenen Wortes gesetzt

Hier ist der Ablauf in der Funktion zerlegeText() noch einmal als Struktogramm dargestellt:

Struktogramm zu zerlegeText()

Bild 19.6-1: Struktogramm zu zerlegeText()