Einzelne Buchstaben in Char-Variable verendern?



  • Ich habe da ein wohl bekanntes aber mir noch verschleiertes Problemchen...

    ich möchte ein Prog schreiben mit dem ich einen Klartext in Atbash übersetzen kann.
    Ich habe eine Variable deklariert:

    char klartext[100];
    char atbash[100];

    [100] für 101 buchstaben im array oder geht das auch ohne Array?

    dann lese ich den klartext mit cin << ein:

    cin << klartext;

    nun dachte ich mache ich es volgendermaßen:

    if( klartext[0] == a ) { atbash[0] == z}
    else ( klartext[0] == b ) { atbash[0] ==y}
    usw, ;

    und das ganze in eine for-schleife bis kein buchstabe mehr im klartext vorhanden ist. bzw. mit sizeof den klartext auslesen bis ich einen wert für klartext habe.

    nur wie sollte es auch anders sein es funktioniert nicht.
    Wol liegt mein Fehler? Kann mir das jemand verklickern?

    anikikitano



  • Wo liegt die Fehlerbeschreibung?



  • AnikiKitano schrieb:

    if( klartext[0] == a ) { atbash[0] == z}
    else ( klartext[0] == b ) { atbash[0] ==y}
    

    ist nicht ganz korrekt, da der else Teil (kt{0]==b) ist und der Teil

    {atbash[0]==y}
    

    immer ausgeführt wird.

    verwende else if anstatt else

    Andere Fehler: Zuweisung = anstatt == (das vergleicht nur und verändert nichst)

    EDIT: Am einfachstens wäre es, wenn du die Werte, die Codiert werden sollen, in ein Array speicherts, und dann dieses zum "Übersetzen" verwendest.

    atbash[i] = translate[klartext[i]-offset]
    

    offset ist der erste Wert, der in der Tabelle vorkommt. Zum Beispiel 0x20 (Leerzeichen}

    EDIT 2:

    Das man Char-Zeichen in Hochkomma schreibt, weist du ja - wenn nicht, solltest du mal richtig C++ von Anfang an lernen



  • AnikiKitano schrieb:

    if( klartext[0] == a ) { atbash[0] == z}
    else ( klartext[0] == b ) { atbash[0] ==y}
    usw, ;

    wenn du zeichenkonstanten verwenden willst, dann mußt du sie in einfache anfürungszeichen setzen: 'a' 'b' etc.

    übrigens

    AnikiKitano schrieb:

    [100] für 101 buchstaben im array

    [100] steht für 100 buchstaben von 0-99 😉



  • das geht auch anders 😃

    btw, es geht immer anders 😉



  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string klartxt="abcdefghijklmnopqrstuvwxyz", atbash="zyxwvutsrqponmlkjihgfedcba";
    	char klartext[100]="\0";
    
    	cin.getline(klartext,100,'\n');
    
    	for(int i=0; i<100 && klartext[i]!='\0';++i)
    		if(isalpha(klartext[i]))
    			klartext[i]=atbash.at(klartxt.find(klartext[i]));
    
    	cout << klartext << endl;
    
    	return 0;
    }
    

    =+-> MS Visual C++ 6.0 <-+=


Anmelden zum Antworten