float, int to char
-
@Bashar
Also quasi wie strtoul das macht
EDIT: Äh, umgekehrt[ Dieser Beitrag wurde am 15.05.2003 um 13:26 Uhr von MaSTaH editiert. ]
-
Jo klar. Wenn die Vorgabe ist, diese Funktionen ohne Library zur Verfügung zu stellen, muß man sie nachimplementieren.
-
@Bashar
Also dein Pseudocode ist mir ein Rätsel. Ist es möglich dass du es in "C" umschreibst?
-
Du würdest es dann auch nicht verstehen.
-
Original erstellt von Bashar:
Du würdest es dann auch nicht verstehen.
-
Da hat Bashar recht. Sein Pseudocode ist doch einfacher als fertiges C.
void int2str(char* str,int x,int basis) { char* pos=str; // basis muß > 1 sein assert(basis>1); //Ergebnis := Leerstring *pos='\0'; //falls zahl = 0: if(x==0) // gebe "0" zurück { strcpy(pos,"0"); return str; } //falls zahl negativ: if(x<0) // hänge Minuszeichen an Ergebnis an { *pos++='-'; x=-x; } //solange zahl nicht 0: while(x!=0) // hänge das Ziffernzeichen von zahl mod basis an das Ergebnis an // leicht machbar bis basis 36 { char ch=x%10; if(ch<10) *pos++=x+'0'; else *pos++=x-10+'a'; // teile Zahl durch Basis x/=10; } //drehe Ergebnis um {//das lass ich mal aus } //gebe Ergebnis zurück return
-
würd ichs für mich brauchen, würd ich vermutlich sowas machen.
char* uint2str(unsigned int x) { static char buf[AUSREICHEND+VORZEICHENPLATZ]={0}; char pos=buf+sizeof(buf)-1; *pos='\0';//diese zeile evtl weg und dafür const zurückgeben do *--pos=x%10; while(x/=10); return pos; } char* uint2str(signed int x) { char* pos=uint2str(abs(x)); if(x<0) *--pos='-'; }
-
@Bashar
ich habe es doch verstanden (ich brauche immer etwas länger... hehehe).
Ich habe dein Pseudocode in die Tat umgesetzt (das von @volkard ist voller Fehler).
Das Problem ist noch das 2 Warnungen kommen (es funzt aber...):c:\test.cpp(23) : warning C4172: Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegeben
c:\test.cpp(36) : warning C4172: Adresse einer lokalen Variablen oder eines temporaeren Wertes wird zurueckgegebentest.obj - 0 Fehler, 2 Warnung(en)*
hier der code:
#include <stdio.h> #include <string.h> char *Funktion (int) ; void main (void){ int iInt = 5600 ; char szInt[11] ; strcpy (szInt, Funktion (iInt)) ; printf ("%s", szInt) ; } char *Funktion (int x){ char szString[10], szRuckgabe[10] ; int iZahl_1 = 0, iZahl_2 = 0 ; if (x == 0){ szRuckgabe[0] = '0' ; szRuckgabe[1] = '\0' ; return szRuckgabe ; } szString[0] = '\0' ; do{ szString[iZahl_1++] = (x % 10) + 48 ; } while (x/=10) ; szString[iZahl_1] = '\0' ; iZahl_1-- ; for (; iZahl_1 >= 0 ; iZahl_1--, iZahl_2++){ szRuckgabe[iZahl_2] = szString[iZahl_1] ; } szRuckgabe[iZahl_2] = '\0' ; return szRuckgabe ; } was mache ich noch falsch?
-
P.S.
ich möchte die Strings nicht global behandeln.
-
dann uebergib der funktion einen zeiger auf den speicherbereich inden der rueckgabewert geschrieben werden soll.
fuer beispiele siehe zB strcpy oder itoa
-
ich möchte die Strings nicht global behandeln.
Haste meine Umsetzung Bashars Pseudocode angeschaut? Kommt Dir ne Idee dabei?
[ Dieser Beitrag wurde am 19.05.2003 um 06:22 Uhr von volkard editiert. ]