array, char, Wörter vergleichen



  • Hey Leute,
    ich muss da ein Programm schreiben, jedoch weiß ich nicht ob das so wkl
    hinhaut was ich da geschrieben habe.....ich hoffe ihr könnt mir da helfen
    Vielen Dank.

    Das ist die Aufgabe:

    Schreiben Sie ein C++-Programm, bestehend aus
    (a) einer Funktion worte gleich (char w1[ ], char w2[ ], int len)
    Die Funktion gibt zuruck, ob beide Zeichenketten genau gleich sind. Der
    dritte Parameter int len enthalt die maximale Lange der Zeichenketten
    w1 und w2.
    (b) und einer main()-Funktion:
     Stellen Sie Speicherplatz fur ein Feld mit 1000 Worten zu je 100
    Buchstaben bereit.
     Alle Worte sollen aus einer Datei eingelesen und im oben bereitgestellten
    Feld gespeichert werden.
    Der Name der Datei ist vom Nutzer einzulesen und besitzt maximal
    41 Buchstaben. Falls in der Dateiarbeit ein Fehler auftritt, ist
    davon auszugehen, dass dieser aufgrund einer Fehleingabe durch
    den Nutzer eingetreten ist. Das Programm darf in diesem Fall nicht
    beendet werden, sondern muss das Einlesen der Daten garantieren.
    Der erste Wert der Datei beinhaltet die Anzahl der in der Datei
    enthaltenen Worte, gefolgt von allen Worten.
    Zur Losung der Aufgabe ist die Verwendung der Bibliothek fstream
    erlaubt.
     Ermitteln Sie durch Verwendung der unter 1a entworfenen Funktion
    worte gleich wie oft ein vom Nutzer eingegebenes Wort im Feld
    vorkommt. Geben Sie das Ergebnis an den Nutzer aus.

    Mein Code bisher..jedoch dürfen wir kein cstring benutzen:

    
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    bool worte_gleich(char w1[], char w2[], int &len, int &anzahl)
    {
        while(w2[len]!=0)
        {
            if(w1[len]!=w2[len]) return false;
            len++;
        }
        anzahl++;
        return true;
        
    }
    
    int main()
    {
        int laenge=0;
        int anz=0;
        int i;
        
        //char worte[1000];
        ifstream einlesen ("worte_gleich.txt");
        if(!einlesen)
        {
            cout <<"Datei konnte nicht eingelesen werden" << endl;
            return 0;
        }
        char worte[1000];
        for(i=0; i<1000; i++)
        {
            einlesen >> worte[i];
        }
        einlesen.close();
        
        /*char worte[100];
        cout << "Geben sie ein Worte ein: " << endl;
        cin >> worte;*/
         
        char wort[100];
        cout << "Geben sie ein Wort ein: " << endl;
        cin >> wort;
        
        
        if(worte_gleich(wort, worte, laenge,anz))
        {
            cout << "Die Woerter sind gleich"  << endl;
            cout << "Das Wort hat eine maximale Laenge von " << laenge << " Zeichen" << endl;
            cout <<"Das Wort kommt " << anz << " mal im Feld vor" << endl;
        }
        else
        {
            cout << "Die Woerter sind nicht gleich" << endl;
            cout <<"Das Wort kommt " << anz << " mal im Feld vor" << endl;
        }
        return 0;
    }


  • @ShuraiyaKudo Die Parameter der Funktion sind vorgegeben.
    Warum hast du len und anzahl und dann noch als Referenz?
    (du darfst die Frage beantworten)

    Du brauchst ein 2D-Array für deine 1000 Wörter zu 100 Zeichen (wenn du keine andere Lösung dafür kennst).
    Im Augenblick hast du nur zwei Felder zu 1000 bzw 100 Zeichen.



  • @ShuraiyaKudo sagte in array, char, Wörter vergleichen:

    jedoch weiß ich nicht ob das so wkl
    hinhaut was ich da geschrieben habe

    Hast du es mal übersetzt?
    Hast du es mal ausprobiert?

    Herzliches Beileid, dein Lehrer ist YAIT (yet another incompetent teacher).



  • @ShuraiyaKudo sagte in array, char, Wörter vergleichen:

    Falls in der Dateiarbeit ein Fehler auftritt, ist
    davon auszugehen, dass dieser aufgrund einer Fehleingabe durch
    den Nutzer eingetreten ist. Das Programm darf in diesem Fall nicht
    beendet werden

    @ShuraiyaKudo sagte in array, char, Wörter vergleichen:

    if(!einlesen)
    {
        cout <<"Datei konnte nicht eingelesen werden" << endl;
        return 0;
    }
    

    Wie passt das zusammen?

    Tipp: fange erstmal an, die Funktion fehlerfrei zu schreiben; warum nimmst du nicht die vorgegebene Funktionsdeklaration sondern frickelst selber rum?

    bool worte_gleich(char w1[], char w2[], int len)
    {
        ...    
    }
    

    Tipp: es ist auch möglich, innerhalb einer Funktion eigene, lokal geltende Variablen zu verwenden.



  • Ich würde den Lehrer gerne mal beschimpfen. Könntest du mal einen Kontakt vermitteln 😃
    Die Aufgabe lag vermutlich 20 Jahre in einem Schrank und wurde erst jetzt von Archäologen wiederentdeckt. Anders kann ich mir das nicht erklären.



  • 
    ```#include <iostream>
    #include <fstream>
    using namespace std;
    
    bool worte_gleich(char w1[], char w2[], int len)
    {
        while(w2[len]!=0)
        {
            if(w1[len]!=w2[len]) return false;
            len++;
        }
        return true;
        
    }
    
    int main()
    {
        int laenge=0;
        int anz=0;
        int i;
       
        char dateiname[41];
    
        ifstream datei;
        do
        {
            cout << "Dateiname: " << endl;
            cin >> dateiname;
            datei.open(dateiname);
        
            if(datei.is_open()==false)
            {
                cout <<"Datei konnte nicht eingelesen werden" << endl;
            }
        }
        while(!datei);
        
        int x;
        datei >> x;
        char worte[1000][100];
        
        for(i=0; i<anz; i++)
        {
            datei >> worte[i];
        }
        datei.close();
        
            
        char wort[100];
        cout << "Geben sie ein Wort ein: " << endl;
        cin >> wort;
        
        for(i=0; i<anz; i++)
        {
            if(worte_gleich(wort, worte[i], laenge))
            {
                cout << "Die Woerter "<< wort << " und " << worte[i] << " sind gleich"  << endl;
                anz++;
            }
            else
            {
                cout << "Die Woerter "<< wort << " und " << worte[i] << " sind nicht gleich"  << endl;
            }
        }
        cout <<"Das Wort " << wort << " kommt " << anz << " mal im Feld vor" << endl;
        return 0;
    }
    
    Das wäre mein Programm unter Berücksichtigung aller Punkte. 
    
    In der Aufgabe stand ja nicht dass ich die Länge des Wortes ausgeben muss, jedoch wie kann ich die Länge ausgeben ohne dabei int len verändern zu müssen?


  • @ShuraiyaKudo sagte in array, char, Wörter vergleichen:

    Der
    dritte Parameter int len enthalt die maximale Lange der Zeichenketten
    w1 und w2.

    Das ist aus der Aufgabenstellung.

    In deiner main rufst du die Funktion mit den Paramtern wort und worte[i] auf. D.h len sollte den Wert 100 bekommen.
    Das ist die Maximallänge, bis zu der die Strings verglichen werden.


Log in to reply