(runlength): Wie speichere ich zeichen in einem char * ??



  • Hallo,

    ich habe eine entkodierungsmethode geschrieben, z.B wird bei der Eingabe aaabbbccc, das ausgegeben: a3b3c3.
    Ich möchte allerdings,dass die Ausgabe in dest gespeichert wird, aber leider wird nur "c3" gespeichert. Weiß jemand wie ich das am Besten machen kann, so dass in dest, "a3b3c3" steht?? (es muss auch berücksichtigt werden, wen z.B 10 zeichen vorkommen, dass auch z.B a10 stehen kann. Da 10, aus zwei Zeichen bestehen aus "1" und "0".
    Danke im voraus!!!

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    void encode(char *dest, const char *src){
    	int i, c=1;
    
    	for(i=0;i<strlen(src);i++){
    			if(src[i]==src[i+1]) 
    					c++;
    			else {
    				if(c==1){
    					sprintf(dest,"%c",src[i]);
    				}
    				else{
    					sprintf(dest,"%c%d",src[i],c);
    					c=1;
    				}
    				printf("%s", dest);
    			}
    	}
    } 
    
    int main (int argc, char *argv[]){
    
    	if (argc<2)
    		printf("Falsche einn");
    
    	else {
    
    		int i,len=0;
    		for(i=1;i<argc;i++)
    			len+=strlen(argv[i])+1; 
    
    		char *dest_tmp=malloc (sizeof(char)*len);
    
    		for(i=1;i<argc;i++){
    			entkodieren(dest_tmp, argv[i]);
    
    		printf("\n");
    		}
    		free(dest_tmp);
    	}
    
    return 0;
    }
    


  • Hi,
    Wenn du dest inkrementierst, dann kommst du nen Schritt weiter. So schreibst du immer in die gleiche Adresse rein.

    Gruß,
    B.B.



  • Bis dahin kam ich auch schon, aber wie mache ich das denn genau?

    *dest=src[i];
    *dest=c;
    
    dest++;
    

    ??



  • Die Methode hinkt aber etwas... Was passiert wenn du a3b3c3 komprimierst; Und wieder dekomprimierst?



  • Es soll ja nur komprimieren, also wenn man aabbccc, soll a2b2c3 , ausgegeben werden. Und das passiert ja auch einwandfrei, nur ich möchte, dass es bei dest, gespeichert wird.



  • Du musst die Zeichen zählen, dann die Zahl in eine Zeichenkette umwandeln. Das Zeichen speichern, dest um ein Byte inkrementieren. Die in eine Zeichenkette umgewandelte Zahl in dest speichern, dest um die Länge der Zeichenkette inkrementieren, usw.



  • B.B. schrieb:

    Du musst die Zeichen zählen, dann die Zahl in eine Zeichenkette umwandeln. Das Zeichen speichern, dest um ein Byte inkrementieren. Die in eine Zeichenkette umgewandelte Zahl in dest speichern, dest um die Länge der Zeichenkette inkrementieren, usw.

    Die wandele ich doch schon mit sprintf um, aber trotzdem funktioniert es nicht 😞



  • pronix_2008 schrieb:

    Es soll ja nur komprimieren, also wenn man aabbccc, soll a2b2c3 , ausgegeben werden. Und das passiert ja auch einwandfrei, nur ich möchte, dass es bei dest, gespeichert wird.

    Und was bringt dir eine Einwegkompression? Es gibt verschiedene Ansätze für dein Problem, der einfachste ist wohl immer die Anzahl der Zeichen + dem Zeichen auszugeben, auch wenn das Zeichen allein steht.



  • pronix_2008 schrieb:

    Die wandele ich doch schon mit sprintf um, aber trotzdem funktioniert es nicht 😞

    Du schreibst immer an der gleichen Stelle im Speicher und überschreibst die vorigen Werte. Nimm für die Umwandlung einen extra Puffer und hänge den dann an dest hinten dran.



  • Big Brother schrieb:

    pronix_2008 schrieb:

    Die wandele ich doch schon mit sprintf um, aber trotzdem funktioniert es nicht 😞

    Du schreibst immer an der gleichen Stelle im Speicher und überschreibst die vorigen Werte. Nimm für die Umwandlung einen extra Puffer und hänge den dann an dest hinten dran.

    danke, habe es mit strcat hinbekommen.
    Ich habe einen puffer hinzugefügt:

    char puffer[10];
    ...
    sprintf(puffer,"%c",src[i]);
    strcat(dest,puffer);
    ...
    else{
    sprintf(puffer,"%c%d",src[i],c);
    strcat(dest,puffer);
    ...
    

    danke 🙂


Anmelden zum Antworten