Hallo an alle! Und zwar hab ich folgendes Problem: Ich will aus einer Integer-Zahl einen String mit der Länge 5 machen. Wenn die Integer-Zahl aus 5 Zeichen besteht, dann ist das kein Problem. Nur wenn sie jetzt z.B. aus nur 4 Zeichen besteht, will ich, dass dann im String zuerst eine Null und dann die Zahl steht. Wie mache ich das am besten? Gibt es da eine Funktion, die das kann? Ach ja, ich programmiere in C. Vl kann mir ja jemand helfen. Danke schonmal im Voraus. lg Peter
Die Funktion itoa aus der stdlib.h kann das z.B., allerdings nicht die führenden Nullen. Die müsstest Du selber einbauen. Müsstest dann einfach abfragen, wo itoa die letzte Stelle hingeschrieben hat und entsprechend den Inhalt des Strings verschieben und die führenden Stellen mit Nullen belegen.
Hallo! Und wie frage ich ab, wo die letzte Stelle ist und wie verschiebe ich das ganze? Ich hab es schon mit sprintf(messwertString,"%5d",messwert1) versucht, aber da stehen dann vorher auch nur Leerzeichen. Gibt es sonst vl eine Funktion, die die Länge der Integer-Zahl ermitteln kann? lg Peter
mystring=''; if (zahl<10000){ mystring=mystring+'0'; } if (zahl<1000){ mystring=mystring+'0'; } if (zahl<100){ mystring=mystring+'0'; } if (zahl<10){ mystring=mystring+'0'; }
und ohne sprintf...
1 | int i = 5; |
2 | messwertString[i] = '\0'; |
3 | while(--i >= 0) |
4 | {
|
5 | messwertString[i] = '0' + messwert1 % 10; |
6 | messwert1 /= 10; |
7 | }
|
... aber ungetestet...
> Also, dass mit sprintf funktioniert auch!
Das sollte es auch, allerdings ist sprintf sehr verschwenderisch, was
Ressourcen angeht. Werners Lösung ist wahrscheinlich die
speichersparendste.
@ johnny.m Es kommt einmal im Programm vor, da geht das schon.
> Es kommt einmal im Programm vor, da geht das schon.
Ein Mal reicht, dann ist die Funktion/Bibliothek drin.
Die Anzahl der Aufrufe ändert da nicht viel dran.
> Es kommt einmal im Programm vor, da geht das schon.
Das hat damit nichts zu tun! Selbst wenn die Funktion nur einmal
aufgerufen wird, wird sie dennoch komplett mit all ihrem Overhead
eingebunden. Da ändert sich auch nichts dran, wenn Du sie im Programm
100 mal aufrufst (dann ist es eher eine Sache der Verarbeitungszeit...).
Aber wenn Du genug Speicher hast, dann kannst Du das natürlich gerne so
machen.
Aso, danke, aber ich denke ich habe genug Speicher.
@WernerB Kannst du vielleicht deinen Code von 16:37 Uhr kurz kommentieren? Scheint nämlich auch die Lösung für mein Problem zu sein.
TechInfo wrote: > @WernerB > > Kannst du vielleicht deinen Code von 16:37 Uhr kurz kommentieren? > > Scheint nämlich auch die Lösung für mein Problem zu sein. Was ergibt 5238 % 10 ? genau: 8 (also die letzte Stelle) Was ergibt 5238 / 10 ? genau: 523 (also die Zahl ohne die letzte Stelle) im nächsten Schleifendurchlauf: Was ergibt daher dann 523 % 10 genau: die 3 Und 523 / 10 das macht dann 52 und im nächsten Schleifendurchlauf was ergibt 52 % 10 exakt: 2 und 52 / 10 du sagts es: 5 womit wir beim nächsten Schleifendurchlauf sind: was ergibt 5 % 10 die 5 und 5 / 10 das macht 0 damit sind wir beim letzten Schleifendurchlauf von den 5-en 0 % 10 macht eine 0 0 / 10 ergibt wieder 0 Aus den % Rechnungen ist also rausgekommen: 8 3 2 5 und 0 (zur Erinnerung, die ursprüngliche Zahl war 5238) der Rest in der Schleife ist also nur noch ein korrektes hinkopieren der jeweiligen Stelle an die richtige Position im String. Ach ja: Aus der Zahl 8 den ASCII Character '8' machen geschieht indem man eine '0' addiert. Glücklicherweise liegen die ASCII Codes für Ziffern alle hintereinander, so dass es reicht zur Ziffer einfach den Code für '0' zu addieren.
@ Werner B. Du bist ja ein Fuchs, wa? Echt dufte die Lösung. Danke !!!!!!!!!!!!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.