Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » switch will nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
01.04.2006, 00:25 Uhr
Hans
Library Walker
(Operator)



Zitat von p-aks:
nö!
Jetzt steig ich noch weniger durch!
Trotzdem Danke

Dachte ich mir schon...
Also, sowas hier:

C++:
switch(x)
{
   case 'a' : ... ; break;
   case 'b' : ... ; break;
...
}

funktioniert ja nur deshalb, weil man es stattdessen auch so schreiben kann:

C++:
switch(x)
{
   case 97 : ... ; break;
   case 98 : ... ; break;
...
}


Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
01.04.2006, 00:29 Uhr
p-aks



Jetzt versteh ich den Zusammenhag nicht mehr!
aber:

Code:
switch(x)
{
         case 'abc' : ... ; break;
         case 'bcd' : ... ; break;
...
}



kann man doch auch:

Code:
switch(x)
{
   case 97 : ... ; break;
   case 98 : ... ; break;
...
}


schreiben.

p-aks
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
01.04.2006, 00:44 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
switch funktioniert nur mit integralen Datentypen! char ist ein solcher und kann auch als Zahl interpretiert werden.
Eine Zeichenkette ist keine Zahl!
Aber 'abc' ist garnichts.....ne Zeichenkette steht in doppelten Hochkommata! Nen einzelnes char steht in einfachen Hochkommata.
Was du da vorhast funktioniert einfach nicht.
Als Alternative bastel dir mit Hilfe von strcmp nen if/else Monster.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 01.04.2006 um 00:45 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
01.04.2006, 00:51 Uhr
Hans
Library Walker
(Operator)



Zitat von p-aks:
[quote Hans]Also wirst Du Deine Wörter und Sätze wohl erst mal mit sowas wie 'ner Hashfunktion bearbeiten müssen, die Dir einen dazu passenden Zahlencode liefert. Gehen wir davon aus, das dieser Code in einem bestimmten Intervall liegt, dann musst Du das Intervall in kleinere Teile zerlegen, und diese einzeln abfragen.

Versteh ich nicht![/quote]
Also: sowas hier:

C++:
switch(x)
{
   case "wort" : ... ; break;
   case "ein satz" : ... ; break;
...
}

geht ja nicht wie wir jetzt wissen.
Also baust Du Dir eine Funktion, der Du den Satz oder das Wort übergibst, und die Dir dafür eine ganze Zahl zurück liefert.

C++:
int Satz_zu_Zahl_wandler(char *satz)
{...
  return zahlenwert;
}


Wenn Du jetzt Deine Wörter oder Sätze prüfen willst, dann übergibst Du diese erst mal an diese Funktion Satz_zu_Zahl_wandler, und das Ergebniss dieser Funktion wertest Du aus. Da das mit switch evtl. sehr umständlich wird, besser mit mehreren if-else-abfragen nacheinander. Gehen wir mal davon aus, die Funktion Satz_zu_Zahl_wandler liefert Zahlen zwischen 0 und 100, dann könnte die Auswertung etwa so aussehen:

C++:
if (zahlenwert>=0 && zahlenwert< 10)
... // tue was
else if (zahlenwert>10 && zahlenwert< 20)
... // tue was anderes
else if (zahlenwert>20 && zahlenwert< 30)
... // tue wieder was anderes
...
else if (zahlenwert>90 && zahlenwert<= 100)
... // letzte Möglichkeit


So war das gemeint. Eine Funktion wie dieser Satz_zu_Zahl_wandler ist eine sogenannte Hashfunktion.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
01.04.2006, 04:00 Uhr
~Black Hell
Gast


Öhhhh wenn man schon mit


C++:
else if()



arbeitet kann man diese Hashfunktion weglassen weil:

Man kann die bedingung von else if() so machen:


C++:

#include <iostream>
#include <string>


using namespace std;


int main(int argc, char *argv[])
{
    string Str;
    
    if(Str == "Hallo")
    {
           cout << "Hallo";
    }
    else if(Str == "Tschuess")
    {
         cout << "Hallo";
    }
    
    
    


    return 1;
}



aber diese Methode hier wäre besser:

[cpp]
if(Str == "Hallo")
{
cout << "Hallo";
}
else
{
if(Str == "Tschuess")
{
cout << "Hallo";
}
else
{
cout << "Falsche Eingabe";
}
}
{/cpp]

durch die verschachtlung bekommt man sozusagen auch den deafault case von switch hin
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
01.04.2006, 04:01 Uhr
~Black Hell
Gast


Scheiße die Übersciht ist weg...der letzte Code nochmal...vieleciht sollte ich mich mal anmelden^^


C++:
if(Str == "Hallo")
    {
           cout << "Hallo";
    }
    else
    {
         if(Str == "Tschuess")
         {
                cout << "Hallo";
         }
         else
         {
             cout << "Falsche Eingabe";
         }
    }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
01.04.2006, 11:28 Uhr
p-aks



So in etwa hatte ich auch daran gedacht nachdem mir gesagt wurde, dass es mit switch nicht klappt. Aber jetzt versteh ich das hier nicht:

Zitat von Black Hell:


C++:
    else
    {
         if(Str == "Tschuess")
         {
                cout << "Hallo";
         }
         else
         {
             cout << "Falsche Eingabe";
         }
    }



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
01.04.2006, 11:44 Uhr
xXx
Devil


wenn der string net hallo enthält, soll er gucken ob er tchuess enthält--- sonnst falsche eingabe ausgeben-....

Wobei ich schon das else if vorziehen würde...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
01.04.2006, 17:55 Uhr
~Black Hell
Gast


Man könnte es auch so machen:


C++:
int main()
{
    string Str;
    
    if(Str == "Hallo")    //1.FALL
    {
           cout << "Hallo";
    }
    else if(Str == "Tschuess")  //.2FALL
    {
         cout << "Hallo";
    }
    else                                // DEAFAULT FALL, also wenn keiner der Eingabepunkte  
                                            eingegeben wurde
    {
         cout << "Falsche Eingabe";
    }

    return 1;
}



is genau das selbe...übersichtlicher, aber ich finde das net so gut...jeder wie er will
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
01.04.2006, 20:05 Uhr
~Black Hell
Gast


Wegen der Sache mit dem Hash...ich habe da ne kleine Lösung:


C++:

//Quadrat ermitteln
int Square(int iZahl,int iSquare)
{
    int iHoch = 1;
    
    for (int loop = 0; loop < iSquare; loop++)
        {
            iHoch *=iZahl;
            
        }
        return iHoch;
}

      
//Hash ermitteln
int CreateHash(char Str[],int Digits, int iHoch = 31)/*DIGTS = Anzahl zeichen*/
{
    unsigned int iHash = 0;
    int iEinzelZeichen[Digits];
    int iStelle = Digits - 1;

        
    for (int loop = 0; loop < Digits; loop++)
    {    
        
        iEinzelZeichen[loop] = Str[loop];
        iHash +=iEinzelZeichen[loop]*Square(iHoch,iStelle);
        iStelle--;
        
     }  
     return iHash;      
}



Beispiel:


C++:

char Str[] = "Hallo";
int hash;

hash = CreateHash(Str,5);

switch(hash)
{
            case 69490486://Hallo
                 {
                       cout << "Hallo du da";
                 }break;
            case 69609650://Hello
                 {
                       cout << "Hello you";
                 }break;
}



wenn man den String oben auf Hello abändert...kann man sich denken was passiert

Problem ist nur noch...man müsste vorher noch die Zeichen anzahl ermitteln...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: