C++ Wie kann man ein char in if, else einsetzten

mfmisch

Grünschnabel
Hallo,

Ich habe folgendes Problem: Ich möchte gerne ein Überstzungsprogramm schreiben, nur wie kann ich z.B. das Wort haben in if (in == haben) benutzen bzw. einsetzen?

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(void)
{
    
    system ("TITLE Diktionaire");
    system ("COLOR 4E");
    
    char la, in[20];
    
    cout << "Bitte geben sie an ob sie von Deutsch nach Französich (f),"<<endl
    <<"oder von Französich nach Deutsch (d) übersetzen wollen."<<endl<<endl;
    
    cin >> la;
    
    if (la == 'f')
    {
           ds:
                system("CLS");
                system("TITLE Diktionaire Deutsch-Französich");
                cout << "Bitte geben sie das zu übersetzende Wort ein:"<<endl<<endl;
                cin >> in;
                
                if (in == haben)
                {
                     cout << "avoir, verb."<<endl<<endl;
                     system("PAUSE");
                     goto ds;
                }
                else
                        cout << "Dieses Wort existiert nicht..."<<endl<<endl;
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

Ich habe es mal so gepostet, wie ihr aber vieleicht merkt ist das Programm noch nicht vollständig, müsste aber das tun können was es sollte.
 
Hallo,

benutze als Datentyp für die Eingabe doch gleich einen string und vergleiche dann mit der compare-Methode:
C++:
std::cout << "Bitte geben sie das zu übersetzende Wort ein:" << std::endl << std::endl;

std::string str;
std::cin >> str;

if( str.compare("haben") == 0 )
{
    std::cout << "avoir, verb."<< std::endl << std::endl;
}
else
{
    std::cout << "Dieses Wort existiert nicht..." << std::endl << std::endl;
}
Ich hoffe allerdings, du willst das Wörterbuch nicht als endlose if/else - Liste aufbauen. Hier solltest du dir eine sinnvolle, am besten externe, Methode zum Speichern des Wörterbuches überlegen. Dann benötigst du nur eine allgemeine Suchfunktion.

Gruß
MCoder
 
Falls du bei deiner Methode bleiben willst kannst du auch einfach die strcmp Funktion benutzen.

Code:
if( !strcmp( in, "haben" ) );
{
   cout << "avoir, verb."<<endl<<endl;
   system("PAUSE");
   goto ds;
}
else
   cout << "Dieses Wort existiert nicht..."<<endl<<endl;
 
Verwende den std::string und dann brauchst du keine compare-Funktion, du kannst dann direkt mit == vergleichen:

Code:
std::cout << "Bitte geben sie das zu übersetzende Wort ein:" << std::endl << std::endl; 

std::string str;
std::cin >> str; 
if ( str == "haben" )
{    
  std::cout << "avoir, verb."<< std::endl << std::endl;
}
else
{    
  std::cout << "Dieses Wort existiert nicht..." << std::endl << std::endl;
}

Wenn du da übrigens eine ganze Handvoll Wörter übersetzen lassen willst, könntest du die evtl. in einen Container packen (std::map zum Beispiel).
 
Danke für die schnellen antworten..., wie müsste ich das mit der Suchfunktion dann machen, denn es würde eine endlose if/else werden
 
Endurion hat's schon erwähnt: Du könntest eine map verwenden:
C++:
// Wörterbuch anlegen
///////////////////////////////////////////////////////

std::map<std::string,std::string> GermanFrench;
GermanFrench["haben"] = "avoir, verb.";
// ... weitere Wörter


// Eintrag suchen
///////////////////////////////////////////////////////

std::cout << "Bitte geben sie das zu übersetzende Wort ein:" << std::endl << std::endl;
std::string str;
std::cin >> str;

std::map<std::string,std::string>::iterator it = GermanFrench.find(str);

if( it != GermanFrench.end() )
{
    std::cout << it->second << std::endl << std::endl;
}
else
{
    std::cout << "Dieses Wort existiert nicht..." << std::endl << std::endl;
}
Gruß
MCoder
 
Gut funktioniert jetzt, Danke für die hilfe, aber gibt es keine möglichkeit Wörter hinzuzufügen währen das Programm läuft, man kann also ein Wort hinzufügen wenn es fehlt.
 
Du kannst jederzeit der Map Einträge hinzufügen. Einfach mit dem []-operator aufrufen:

GermanFrench["lsmf"] = "voule vouz dingens";

Das Rauslöschen eines Items musst du allerdings über iteratoren machen, ähnlich der Suche:

Code:
std::map<std::string,std::string>::iterator it = GermanFrench.find(str); 
if ( it != GermanFrench.end() )
{
 GermanFrench.erase( it );
}
 
Zurück