PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: Int in String umwandeln (zu Fuß)


Gast
2008-06-06, 13:55:49
Hi,

wie baue ich mir einen Konverter, der einen Int Wert in C in einen String umwandelt? Ohne etwas wie itoa oder sprintf zu benutzen. Ich hatte mir gerade was mit Logarithmen überlegt, das scheint mir aber etwas oversized zu sein. Gibts nicht etwas ganz simples, wie ich einen INT in ASCII umwandle?

danke

Gnafoo
2008-06-06, 14:15:01
Hier steht leider die falsche Richtung (auch wenn es vielleicht noch anderweilig mal hilfreich sein könnte und deshalb hier stehen bleibt :D). Bitte zum nächsten Posting springen.

Ist doch nicht so schwer. Pseudocode:


int base = 1;
int sum = 0;

for (i = str.length() - 1; i >= 0; i--)
{
int digit = str[i] - '0';
if ((digit < 0) || (digit > 9)) error();

sum += digit * base;
base *= 10;
}

return sum;


Also string von rechts nach links scannen, Differenz der Zeichencodes zur '0' bestimmen und multipliziert mit der aktuellen Basis auf die Summe draufaddieren, wobei die Basis mit jeder Ziffer mit 10 multipliziert wird.

"123"
= 3*1 + 2*10 + 1*100

Auf ein Minuszeichen muss man eventuell noch prüfen am Anfang.

Gnafoo
2008-06-06, 14:27:03
Ah mist. Falsche Richtung :D. Naja int in string dürfte in etwa wie folgt gehen:


int size = ceiling(log10(num)); // nicht 100% sicher.
char buffer[size + 1];

buffer[size] = 0;
int i = 1;
do
{
int digit = num % 10;

assert(size - i >= 0);
buffer[size - i] = '0' + digit;

num /= 10;
i++;
}
while (num != 0);


Modulo um die aktuelle Ziffer rauszubekommen, Ganzzahldivision um die letzte Ziffer zu entfernen. Natürlich muss man den Kram dann rückwärts in den String schreiben.