Kopieren von Char Zahlen
-
Hallo zusammen,
Für euch mit euren Adler "C" Augen ist das wohl kein Problem. Ich möchte einen Zahlenstring mit Vorzeichen und Blanks filtern...
Das ist der Code:
#include <stdio.h> #include<string.h> #include<stdlib.h> // int main() { char ergebnis[20],ergebnisdb[21]; long int zahl = -1000000009; int i,j; sprintf (ergebnis,"%li ",zahl); printf("%s\n",ergebnis); strcpy((char*)ergebnisdb + 21, "\0"); // Test purpose j=20; for (i = 20;i >= 0;i--) { if (strcmp((char*)ergebnis+i,"/") > 0 && strcmp((char*)ergebnis+i,":") < 0) { printf ("Ziffer\n"); strncpy ((char*)ergebnisdb+j,(char*)ergebnis+i,(size_t) 1); // copy Ziffer j--; } else { printf ("keine Ziffer\n"); } } printf("%s\n",ergebnisdb); return 0; }
Abgesehen von dem hässlichen If (der funktioniert anscheinend - gibt es da eine elegantere Lösung??), funktioniert der strncpy() nicht. Wo ist da mein Denkfehler??
LG
-
Ein einzelnes char kannst Du so kopieren:
ergebnisdb[j] = ergebnis[i];
Nicht vergessen, wenn Du fertig bist, ans Ende ein '\0' zu schreiben.
-
Statt strncpy lieber eine direkte zuweisung (char[j]=char2[i]). Die Bedingung könnte man auch besser anders schreiben und die Schleife auch umstellen:
for (i = 0,j=0;i < 20;i++) { if (isdigit(ergebnis[i])||ergebnis[i]=='-') { printf ("Ziffer\n"); ergebnisdb[j] = ergebnis[i]; j++; } else { printf ("keine Ziffer\n"); } } j=min(j,20); ergebnisdb[j]=0; // baeachten! //printf("%s\n",ergebnisdb); pus(ergebnisdb);
Edit: j muss gar nicht unbedingt überprüft werden, naja, schaden tut's auch nicht.
-
aus
strcpy((char*)ergebnisdb + 21, "\0"); // Test purpose
wird
ergebnisdb[20] = 0; // oder = '\0'
Ein Array mit n Elementen beginnt bei 0 und geht bis n-1 !
aus
if (strcmp((char*)ergebnis+i,"/") > 0 && strcmp((char*)ergebnis+i,":") < 0)
wird
if (isdigit(ergebnis+i)) // oder (isdigit(ergebnis[i]))
Für isdigit brauchst du noch ein
#include <ctype.h>
-
Besten Dank für die Tipps!