Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 1. Beginner Rätsel (bitte nur Anfänger)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
11.05.2003, 13:31 Uhr
Oliver
S2-Pixelgeneral


Schreibt eine Funktion(oder mehrere), die Integerzahlen in char* umschreiben(aber nur zurückliefern, kein Typecasting!)
Das fertige Programm kann dann zum Beispiel eine Stelle einer Zahl bestimmen.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 11.05.2003 um 13:40 Uhr von Oliver Müller editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.05.2003, 18:35 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Hi Olli,
du solltest dir mal sprintf und itoa( itoa ist allerdings kein ansi wie ich dank virtual weiss) anschauen

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.05.2003, 18:54 Uhr
Oliver
S2-Pixelgeneral


Ich meine aber eigentlich so was:


C++:
char CharStrChar(char g) {
    switch (g) {
    case 1:
        return '1';
        break;
    case 2:
        return '2';
        break;
    case 3:
        return '3';
        break;
    case 4:
        return '4';
        break;
    case 5:
        return '5';
        break;
    case 6:
        return '6';
        break;
    case 7:
        return '7';
        break;
    case 8:
        return '8';
        break;
    case 9:
        return '9';
        break;
    case 0:
        return '0';
        break;
    }
}

char * IntStr(unsigned int aus) {
    unsigned int lenge;
    char * erg;
    int zwischenspeicher[7];
    unsigned int wandler;
        if (aus < 10)
            lenge=1;
        if (aus >= 10 && aus < 100)
            lenge=2;
        if (aus >= 100 && aus < 1000)
            lenge=3;
        if (aus >= 1000 && aus < 10000)
            lenge=4;
        if (aus >= 10000)
            lenge=5;
        erg = new char[lenge + 1];
        
        switch(lenge) {
        case 1:
        
            erg[0] = CharStrChar(aus);
            erg[1] = 0;
            break;
        case 2:
            zwischenspeicher[0] = (aus / 10);
            wandler = (aus / 10);
            erg[0] = CharStrChar(wandler);
            wandler = (aus - zwischenspeicher[0] * 10);
            erg[1] = CharStrChar(wandler);
            erg[2] = 0;
            break;
        case 3:
            zwischenspeicher[0] = (aus / 100);
            erg[0] = CharStrChar(zwischenspeicher[0]);
            zwischenspeicher[1] = (aus / 10);
            zwischenspeicher[2] = (zwischenspeicher[1] - zwischenspeicher[0] * 10);
            erg[1] = CharStrChar(zwischenspeicher[2]);
            erg[2] = CharStrChar((aus - (zwischenspeicher[0] * 100 + zwischenspeicher[2] * 10)));
            erg[3] = 0;
            break;
        case 4:
            zwischenspeicher[0] = (aus / 1000);
            erg[0] = CharStrChar(zwischenspeicher[0]);
            zwischenspeicher[1] = (aus / 100);
            zwischenspeicher[2] = (zwischenspeicher[1] - zwischenspeicher[0] * 10);
            erg[1] = CharStrChar(zwischenspeicher[2]);
            zwischenspeicher[3] = (aus / 10);
            zwischenspeicher[4] = (zwischenspeicher[3] - (zwischenspeicher[0] * 100 + zwischenspeicher[2] * 10));
            erg[2] = CharStrChar(zwischenspeicher[4]);
            erg[3] = CharStrChar((aus - (zwischenspeicher[0] * 1000 + zwischenspeicher[2] * 100 + zwischenspeicher[4] * 10)));
            erg[4] = 0;
            break;
        case 5:
            zwischenspeicher[0] = (aus / 10000);
            erg[0] = CharStrChar(zwischenspeicher[0]);
            zwischenspeicher[1] = (aus / 1000);
            zwischenspeicher[2] = (zwischenspeicher[1] - zwischenspeicher[0] * 10);
            erg[1] = CharStrChar(zwischenspeicher[2]);
            zwischenspeicher[3] = (aus / 100);
            zwischenspeicher[4] = (zwischenspeicher[3] - (zwischenspeicher[0] * 100 + zwischenspeicher[2] * 10));
            erg[2] = CharStrChar(zwischenspeicher[4]);
            zwischenspeicher[5] = (aus / 10);
            zwischenspeicher[6] = (zwischenspeicher[5] - (zwischenspeicher[0] * 1000 + zwischenspeicher[2] * 100 + zwischenspeicher[4] * 10));
            erg[3] = CharStrChar(zwischenspeicher[6]);
            erg[4] = CharStrChar((aus - (zwischenspeicher[0] * 10000 + zwischenspeicher[2] * 1000 + zwischenspeicher[4] * 100 + zwischenspeicher[6] * 10)));
            erg[5] = 0;
            break;
        }
        return erg;
}


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.05.2003, 19:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also wenn du nur eine stelle hin und her schreiben willst kannst du einfach 48 (Blick in den ASCII-Code hilft) abziehen bzw drauf addieren. Ist einfacher.

Dein zwischenspeicher hat leider nur eine begrenzte stellenzahl.
ist im grossen ganzen sehr umständlich gelöst.

wie gesagt schau dir sprintf an, ist sehr hilfreich.

Gruss Heiko

ach so bei switch ist es meist noch sinnvoll den default path mit anzugeben weil dein funktion sonst nur partiell ist.
Das heisst wenn du ihr z.B. ein a übergibst kann sie gar nichts zurückliefern.
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.05.2003 um 19:08 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.05.2003, 19:23 Uhr
Oliver
S2-Pixelgeneral


a) mit der Stellenzahl. unsigned Int haben doch nur 5 Stellen oder? Ich will ja )ier keine Milliarden umkonvertieren!

b) Mit den switch(): Es soll ja auch kein a übergeben werden. Ich habe auch dazu eine Warnmeldung gesehen.

c) Es war ja nur eine kleine Übung und es sollten ja eigentlich keine vordefinierten Funktionen verwendet werden. Außerdem wollt ich nicht dass man tausende die Hederdateien einbindet, die alles machen.(da man ja für sprintf eine benötigt (cstdio) oder?)
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.05.2003, 19:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zu a) nein int hat 32 bit. es geht damit von -(2 hoch 31) bis +(2 hoch 31) -1
sind deutlich mehr als 5 stellen (genaugenommen sind es 10)
wenn du unsigned int verwendest wird das msb (most significant bit) nicht negativ sonder positiv interpretiert. Damit läuft der spass dann von 0 bis +(2 hoch 32)-1

b) ich kann dir nur ans herz legen compiler warning ernst zu nehmen und das schreiben partieller funktionen zu vermeiden

c) klar sollte es nur ein übung sein, aber für sprintf braucht man auch keine tausend headerdateien. stdio.h tuts völlig

Ich wollte ja auch nicht dein "kleine Übung" kritisieren, sondern dir halt nur sagen, wie man es einfacher haben kann.

Ich jedenfalls find es gut wenn andere meinen Quellcode kritisieren und mir sagen wie ich es besser bzw. richtig machen kann. Sonst ist mein Lernerfolg nur knapp über Null.

Gruss Heiko
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.05.2003, 21:14 Uhr
virtual
Sexiest Bit alive
(Operator)


zu a)
Der Standard gibt ledigleich vor

C++:
1 == sizeof(char) <= sizeof(short) <=sizeof(int) <= sizeof(long);


Jede darüber hinausgehende Annahme ist betriebssystemabh.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.05.2003, 00:09 Uhr
~0xdeadbeef
Gast



C++:
#include <stdio.h>

main() {
    int i;
    char str[5];
    i = 1922;
    sprintf(str, "%d", str);
    printf("%s", str;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.05.2003, 11:50 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Hi beefy,
ich vermute mal das dein sprintf
eigentlich so aussehen soll:

C++:
sprintf(str, "%d", i);
printf("%s", str);


muss wohl an der fortgeschrittenen Uhrzeit gelegen haben, von dir ist man ja sonst keine Fehlerchen gewöhnt.
Warum registrierst du dich eingentlich nicht. Dann könntest du deine Posts noch editieren oder hast du so einen Hass auf das Cookie?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.05.2003, 12:03 Uhr
~0xdeadbeef
Gast


Äh, klar. sprintf mit Daten in String, nicht String in String, klingt logisch...

Warum ich mich nicht registriere? Wegen des Cookies. Ich hasse Cookies. Cookies sind aus dem tiefsten Schlund der Hölle gestiegen, um uns alle zu vernichten. Wahrscheinlich hat Bill Gates da irgendwie seine Finger im Spiel, und wir alle wissen, was das bedeutet...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: