float, int to char



  • 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 zurueckgegeben

    test.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. ]


Anmelden zum Antworten