Int Feld: 10 durch A ersetzen, 11 durch B usw
-
Hallo
Ich habe ein Programm zur Umrechnung einer Zahl in die Zahl nur Basis n geschrieben (Konsolenanwendung)
Die Zahlen habe ich in 2dmiensionalen integer Felndern liegenNun möchte ich bei Zahlen ab Basis 10 die Hex Darstellung für die Zahlen ausgeben lassen, also
10 durch A ersetzen
11 durch B ersetzenWie kann ich nun wenn z.b. im Integer Feld feld[10][3] eine 10 steht diese durch ein A ersetzen?
Weiß nicht wo ich nachschauen soll.
Danke für Antworten
-
Was Du willst, ist konzeptionell Quatsch. 'int' beinhaltet eine Zahl, NICHT aber deren Darstellung (Hexadezimal, Dezimal ...). Du kannst die Zahl also genausowenig ins Hexadezimalsystem konvertieren wie sie aktuell im Dezimalsystem ist (ist sie nicht). Lediglich die Darstellung bei der Ausgabe (!) kann manipuliert werden.
Bei der Konsolenausgabe geht das sehr einfach über den 'hex'-Modifizierer:
cout << hex << 12 << endl;Gibt 'C' aus.
-
HEy super, vielen Dank
auf das kleine Wörtchen "hex" bin ich nicht gesoßen
Habe nun noch eine Frage:Ich gehe mein Feld aus mit 2 for Schleifen und lasse n und i von 0 bis 19 gehen:
cout << hex <<l[n][19-i]<<" ";Dabei kommt z.b. folgendes raus
Gib eine ganze Zahl ein:
23234
Im 2-er System: 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 0 0 0 1 0
Im 3-er System: 0 0 0 0 0 0 0 0 0 0 1 0 1 1 2 1 2 1 1 2
...Möchte nun die führenden Nullen auslassen, aber die Nullen im inneren des Feldes nicht. Wie bekomme ich nun das hin, habe mit Pointern versucht zu arbeiten, komme aber auf kein Ergebnis.
Will folgende darstellung haben:
Im 2-er System: 1 0 1 1 0 1 0 1 1 0 0 0 0 1 0
Im 3-er System: 1 0 1 1 2 1 2 1 1 2
-
Wie erzeugst Du denn die Ausgaben für's Zweier- bzw. Dreiersystem?
Irgendwo wird da ja wahrscheinlich eine Schleife drin sein, in der Du die aktuelle Ziffer ausgibst. Hier kannst Du ja die einfache Ausgabe durch folgenden Test ersetzen:
leading = leading && (digit == '0'); if (!leading) cout << digit;Dabei ist 'digit' die Darstellung der aktuellen Ziffer (evtl. musst Du das an Deinen verwendeten Datentyp anpassen), 'leading' ist ein boolescher Flag, der vor der Schleife wie folgt definiert ist:
bool leading = true;Solange 'leading' gesetzt ist, wird jetzt die Ausgabe übergangen. Wenn die aktuelle Ziffer keine '0' ist und 'leading' noch gesetzt war, wird es gelöscht.
-
Vielen Vielen Dank für die super Hilfe.
Funktioniert nun alles.
Nur muss in deinem Vorschlag die Null nach dem bool'schen UND ohne ' ' stehen.
-
Der Denkfehler ist, dass Du nicht den Datentyp von 'digit' angepasst hast, wie ich Dir sagte. Bei Dir handelt es sich um 'int's, also musst Du einfach folgendes schreiben, dann klappt es:
leading = leading && (l[n][19 - i] == 0);/EDIT: Quelltext formatiert