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! 👍 💡


Log in to reply