Konvertierung
-
Hallo! Ich soll ein Prog schreiben, was eine gegeben natürliche Zahl einliest, diese dann ins Hexadezimalsystem umwandelt und wieder ausgibt!
Ich habe schon fast alles. Ich häge zur zeit am String. Das klappt nicht! Ich benutze DEV C++, wollte über die Header Datei alles einbinden (#include <iostream>, #include <string>, std:string ... ) aber das checkt er wohl nicht. Nun hab ich mir gesagt ich nehme als string eien char-Array!
Aber das klappt alles nicht so schön! Ich weiß denn nicht wie ich die Zeichen dann immer hintereinander schreibe, weil ich muss ja das neue Zeichen immer hinten ranschreiben, kann ja aber immer nur einen index angeben!? Auch das mit dem string + konv will er nicht so!Hier mal mein Programm:
#include <stdio.h> #include <conio.h> int zahl, k; char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char konv; char string[255]; int main(void) { printf("Geben Sie eine Zahl ein:"); scanf("%d", &zahl); konv = 0; do { zahl = zahl%16; k = k/16; konv = hex[zahl]; string[0] = string + konv; } while (k>0); printf("%c", konv); getch(); return 0; }
-
Hallo,
wenn du mit char-Arrays (C-Strings) arbeiten willst, musst du die Funktionen aus der string.h verwenden. strncat hängt z.B. Zeichen an, allerdings musst du dich da auch selber um genügend Platz für die neuen Zeichen kümmern usw.
Wenn du mit iostream arbeiten willst, bist du schon im C++ Bereich, dann musst du nach #include <iostream> und den restlichen Headern aber ein using namespace std; reinschreiben. Sonst findet er die Klassen gar nicht.
MfG
GPC
-
hmm, naja ich will das mal nun lieber nicht mit den extra klassen und headern machen! Was ist denn falsch wenn ich es so wie ich mit dem char array mache?
-
Robert85 schrieb:
hmm, naja ich will das mal nun lieber nicht mit den extra klassen und headern machen!
okay, aber halbwegs vernünftige Stringverarbeitung geht in C nunmal nicht anders als mit strcat, strcpy, strcmp und Konsorten. Du kannst natürlich auch immer mit Schleifen drüberrödeln, aber das ist auf Dauer ja banane.
Was ist denn falsch wenn ich es so wie ich mit dem char array mache?
Prinzipiell nichts, denn in reinem C gibt es nichts anderes als ein char-Array, wenn's um Stringverarbeitung geht. Da fällt die Wahl nicht schwer
Im Übrigen solltest du auf conio.h verzichten, die ist compilerabhängig, in diesem FAQ-Beitrag steht, welche Alternativen man nutzen kann. Ist sauberer.
MfG
GPC
-
Wieso geht das Programm so aber nicht? er meckert: string[0] = string + konv;
[Warning] assignment makes integer from pointer without a cast ?
-
Weil Du zwei Adressen addierst und das Ergebnis dem ersten Zeichen des Strings zuweist.
Selbst wenn das bei Strings möglich wär, wäre dann nicht string = string + konv; logischer? Naja wie dem auch sei, wie schon erwähnt brauchst Du für die Stringverarbeitung in C die Funktionen die GPC dir schon genannt hat
-
wenn's um einzelne zeichen geht (wie in deinem fall) brauchste aber nicht unbedingt stringfunktionen. einfach 'string[index++] = nächstes_zeichen' und nach dem letzten zeichen eine 0 dranhängen....
-
Ich habs jetzt so: geht aber nicht, sieht jemand den fehler?
#include <stdio.h> #include <conio.h> int zahl, k,nr, i; char hex[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char konv; char string[255]; int main(void) { printf("Geben Sie eine Zahl ein:"); scanf("%d", &zahl); konv = 0; k = zahl; nr=-1; do { nr=nr+1; zahl = k%16; k = k/16; konv = hex[zahl]; string[nr] = konv; } while (k>0); // Ausgabe konvertiere Zahl for (i=nr; i=-1; i--) { printf("%d ",string[i]); } getch(); return 0; }
-
... string[nr] = konv; } while (k>0); string[nr + 1] = '\0';
Edit: Hmm ne, dadran liegts wohl nicht .. ka, was du da machst O_o
-
probier mal dies (ungetestet):
#include <stdio.h> char *to_hex (unsigned int zahl) { static char string[32]; static char *hex = "0123456789ABCDEF"; char *p = string + sizeof(string) - 1; *p = 0; while (zahl) { *p-- = hex[zahl & 0x0f]; zahl >>= 4; } return p+1; } void main (void) { unsigned int zahl; printf("Geben Sie eine Zahl ein:"); scanf("%u", &zahl); puts (to_hex(zahl)); }
-
danke