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



## mfmisch (3. Oktober 2008)

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?


```
#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.


----------



## MCoder (3. Oktober 2008)

Hallo,

benutze als Datentyp für die Eingabe doch gleich einen string und vergleiche dann mit der compare-Methode:

```
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


----------



## MedRamBO (4. Oktober 2008)

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


```
if( !strcmp( in, "haben" ) );
{
   cout << "avoir, verb."<<endl<<endl;
   system("PAUSE");
   goto ds;
}
else
   cout << "Dieses Wort existiert nicht..."<<endl<<endl;
```


----------



## Endurion (4. Oktober 2008)

Verwende den std::string und dann brauchst du keine compare-Funktion, du kannst dann direkt mit == vergleichen:


```
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).


----------



## mfmisch (4. Oktober 2008)

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


----------



## MCoder (4. Oktober 2008)

Endurion hat's schon erwähnt: Du könntest eine map verwenden:

```
// 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


----------



## mfmisch (4. Oktober 2008)

gut, mir wird aber angezaigt dass map nicht zur std gehört


----------



## MCoder (4. Oktober 2008)

Da wird wohl der Header fehlen. Ergänze mal ein: #include <map>

Gruß
MCoder


----------



## mfmisch (4. Oktober 2008)

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.


----------



## Endurion (5. Oktober 2008)

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:


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


----------



## mfmisch (6. Oktober 2008)

Hallo, Ich hab jetzt mal versucht aber wo muss ich den genau einsetzten damit es geht


----------

