mit if wort vergleichen



  • Hallo liebe Forumuser,

    ich habe ein kleines problemchen!

    ich wollte das wenn der Benutzer ein wort eingibt mit :

    if (buchstabe0=="WORT")
    

    vergleich ob es wort ist wenn nicht mit else allerdings bringt er mir da schon die fehlermeldung:

    error C2040: '==': 'int' unterscheidet sich von 'const char [6]' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
    

    wie kann ich das umgehen oder besser machen?

    mfg derdefeckter



  • Du vergleichst da offensichtlich ein int..
    Und auch wenn es ein C-String wäre, müsstest du strcmp benutzen.

    Einfacher ist gleich std::string zu benutzen:

    #include <iostream>
    #include <string>
    
    int main ()
    {
      std::string word = "hallo";
    
      std::string input;
      std::cin >> input; // einlesen
    
      if ( input == word ) // ganz einfach vergelichen
       std::cout << "equal";
      else
       std::cout << "not equal";
    }
    


  • hallo vieleicht für den besseren durchblick so hab ich es bis jetzt gemacht:

    #include <cstdlib>
    #include <string>
    #include <iostream>
    #include <fstream>
    #include <windows.h>
    #include "umlaute.h"
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),  FOREGROUND_GREEN);
    
       char buchstabe0;
    
          cout<<"Bitte Befehl eingeben\n";
          cin>>buchstabe0;
    
          if (buchstabe0=="HILFE")
    {
    
       ifstream in("Hilfe.dat");
       string line;
    
    while (getline(in, line)) cout << line << endl;
    
    system("PAUSE");
        return EXIT_SUCCESS;   
    }
    }
    

    p.s. Ich bin Anfänger...



  • Ja. Und jetzt schau dir nochmal mein Beispiel an. Da steht die Lösung ja eigentlich schon.



  • drakon schrieb:

    Ja. Und jetzt schau dir nochmal mein Beispiel an.

    Und vor allem ein ordentliches Tutorial/Buch.
    Dass du Anfänger bist ist keine Schande. Allerdings solltest du die Dinge die du anwenden willst erst kennengelernt und verstanden haben, sonst entsteht nur Chaos.



  • char buchstabe0;
    

    ein "char" ist genau EIN Zeichen.

    "HILFE"
    

    Jetzt zähl mal aus wievielen Zeichen das Wort "HILFE" besteht und überleg ob die Menge x der Zeichen aus dem Wort "HILFE" in einen Datentyp passt der genau 1 Zeichen groß ist.

    Ausserdem... mit == kannst Du keine C-Strings vergleichen, damit vergleichst Du nur die Adressen der Speicherbereiche... bei std::string ist das was anderes...



  • derdefeckter schrieb:

    if (buchstabe0=="WORT")
    

    Auch ohne das Typsystem von C++ zu kennen, müsste Dir doch klar sein, dass ein "Buchstabe" ("character" auf Englisch) nie gleich einer Zeichenkette mit mehreren Zeichen sein kann.

    Zeichenkonstanten sehen so aus: 'W'. Du könntest also schreiben:

    if (buchstabe0=='W')
    

    (beachte: Es sind keine Anführungszeichen sondern Hochkommas) So kann getestet werden, ob das eingegebene Zeichen gleich dem großen W war.

    Wenn Du Dich mit Zeichenketten erstmal nur oberflächlich beschäftigen willst und einen entsprechenden Typ benutzen willst, der sich ähnlich wie int, double u.s.w. verhält, mit dem einzigen Unterschied, dass ein Objekt dieses Typs Zeichenketten statt Zahlen speichert, dann nimmst Du std::string

    #include <string>
    #include <iostream>
    
    int main() {
      std::string hw = "Hello World!";
      std::cout << hw << '\n';
    }
    

    Wenn's darum geht, genauer zu verstehen, was eine mit "" eingeschlossene Zeichenkette eigentlich ist, dann bist Du schon beim Thema Arrays. Die ""-Syntax lässt den Compiler ein char-Array vom Typ const char[N] erzeugen, wo die Zeichenkette null-terminiert drinsteht und N die Länge der Zeichenkette + 1 ist. Solche Arrays lassen sich aber problemlos in std::string "verwandeln". Arrays verhalten sich aber nicht so wie Objekte von "normalen Wert-Typen" (int, double, std::string, ...), was zu Überraschungen führen kann. Man kann sie nicht so einfach vergleichen, zuweisen, kopieren, u.s.w.. Bedanken kann man sich für diesen Umstand bei den C-Erfindern. Die haben sich das mit den Arrays so ausgedacht.

    wie kann ich das umgehen oder besser machen?

    Was soll das Programm denn machen? Die Tatsache, dass Du deine eine Variable "buchstabe0" genannt hast, irritiert mich. Soll jetzt nur ein Buchstabe eingelesen werden oder ein Wort? Wenn Du wirklich nur einen Buchstaben einlesen wolltest, was für einen Vergleich wolltest Du da machen? Das kann ich genauso wenig wie Dein Compiler erkennen.



  • hallo,

    also ich will das wenn man HILFE in die konsole eingibt das das Programm dann die HILFE.dat öffnet und in der Konsole ausgibt!

    statt buchstabe hätte ich wahrscheinlich wort nehmen sollen.

    mfg derdefeckter


  • Mod

    derdefeckter schrieb:

    hallo,

    also ich will das wenn man HILFE in die konsole eingibt das das Programm dann die HILFE.dat öffnet und in der Konsole ausgibt!

    statt buchstabe hätte ich wahrscheinlich wort nehmen sollen.

    mfg derdefeckter

    Das ist ja schön, dass du das willst.

    Deine Frage?



  • @derdefeckter:
    Hier ein Programm, welches das macht, was du beschrieben hast:
    (Man muss bei der Eingabe auf Groß/Kleinschreibung achten.)

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    string Befehl;
    cout << "Befehl: ";
    cin >> Befehl; 
    
    if(Befehl=="HILFE")
    {
    ifstream dat_ein;
    dat_ein.open("Hilfe.dat");
    char x;
    while(dat_ein.get(x))cout << x;
    dat_ein.close();
    }
    else cout << "Ungueltiger Befehl" << endl;
    
    cin.get();
    }
    

    Ich hoffe, es hilft dir weiter.

    MfG, Jochen



  • Jochen S. schrieb:

    @derdefeckter:
    Hier ein Programm, welches das macht, was du beschrieben hast:
    (Man muss bei der Eingabe auf Groß/Kleinschreibung achten.)

    [cpp]#include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;

    int main()
    {
    string Befehl;
    cout << "Befehl: ";
    cin >> Befehl;

    if(Befehl=="HILFE")
    {
    ifstream dat_ein;
    dat_ein.open("Hilfe.dat");
    char x;
    while(dat_ein.get(x))cout << x;
    dat_ein.close();
    }
    else cout << "Ungueltiger Befehl" << endl;

    cin.get();
    }[/cpp]

    Ich hoffe, es hilft dir weiter.

    MfG, Jochen

    Du musst, um string zu gebrauchen noch die String Bibliothek inkludieren...



  • Walnut_Burl schrieb:

    Du musst, um string zu gebrauchen noch die String Bibliothek inkludieren...

    Stimmt eigentlich.
    Mein Compiler (Borland C++ Compiler 5.5) kompiliert das allerdings trotzdem. Anscheinend wurde string.h von iostream.h oder fstream.h eingebunden.
    Hab deshalb wohl #include <string> vergessen...

    MfG, Jochen



  • Jochen S. schrieb:

    Anscheinend wurde string.h von iostream.h oder fstream.h eingebunden.

    Ja, aber oft kann man dann nur einen Teil der Funktionalität benutzen. Beispielsweise kann es sein, dass operator+ fehlt. Oder dass dieses Vorgehen auf einem anderen Compiler gar nicht funktioniert.

    Übrigens haben die Header der Standardbibliothek nie eine Dateiendung, also auch kein ".h". Im Code hast du es richtig gemacht.



  • hey danke leute habt mir schon sehr gut geholfen!

    danke

    mfg derdefeckter



  • hay nochmal
    wie kann ich in diesem "vergleich" die gross und klein schreibung daraus halten also egal ob das wort gross oder klein geschrieben ist es soll trotzdem dann die HILFE.dat öffnen!

    wie kann ich das verwirklichen?




Anmelden zum Antworten