Char um dezimalen Wert vermindern

bauchinj

Erfahrenes Mitglied
Hallo!

Bin leider etwas aus der C-Übung - deshalb entschuldigt diese Anfängerfrage:

Wie kann ich einer Variable vom Typ char einen Wert vom Typ int abziehen um anschließend wieder einen char zu erhalten?, konkretes Beispiel:

Code:
char c = '1', new_c;
int key = 7;
new_c = c - key;
new_c ist in diesem Beispiel immer ein zufälliger Wert, wo hingegen new_c in folgendem Beispiel immer korrekt ist:

Code:
char c = '7', new_c;
 int key = 7;
 new_c = c - key; //new_c = 0

/*anderes Beispiel:*/
char c = '8', new_c;
 int key = 7;
 new_c = c - key; //new_c = 1
 
Hab gerade DAS Problem eroiert, hat weniger mit dem rechnen zu tun, als mit meiner if - möchte ja, wenn der Wert kleiner 0 ist, wieder bei 9 beginnen!

also

Code:
if((c-key) < '0'){
    c = '9' + (c - key + 1);
}

aber das funktioniert nicht richtig, geht nicht in die if...
 
Ich stelle meine Frage nochmal anders bzw. eigentlich ja meine dritte Frage :-)

Wie kann ich den dezimalen ASCII Wert einer char Variable ermittlen, diese um 7 vermindern bzw. erhöhen und anschließend wieder in char umwandeln?
 
Z.B. So:

Code:
char c = 'r';
int key = 7;
int ascii = int(c);                            // Ermittle ASCII-Code
char new_c = char(ascii-key);   // Ziehe key ab und wandle wieder in char
 
Gar keine. Int und char sind die "Standardvariablen".
Uups, du wolltest ja das in C (nicht in C++), dann wärs so:

Code:
char c = 'r';
int key = 7;
int ascii = (int)c;                            // Ermittle ASCII-Code
char new_c = (char)(ascii-key);   // Ziehe key ab und wandle wieder in char
 
Z.B. So:

Code:
char c = 'r';
int key = 7;
int ascii = int(c);                            // Ermittle ASCII-Code
char new_c = char(ascii-key);   // Ziehe key ab und wandle wieder in char
Dein Code unterscheidet sich semantisch überhaupt nicht von dem Code aus Beitrag #1 von bauchinj. Du führst nur zusätzlich function-style Castings durch, welche eben genauso gut implizit durchgeführt werden.

Gruß

\edit: Evlt. ist es so einfacher zu handhaben:
C:
int d = c - '0';
key %= 10;
if (d < key) d += 10;
new_c = '0' + (d - key);
 
Zuletzt bearbeitet:
Zurück