#include #include #include #include #define LINE_SIZE 150 #define MAX_RLEN 50 char* read_line(); char* runLengthCod(char* line); char* encode(char* src); char* decode(char* line); int main(){ char* line = read_line(); //char* compressedline = runLengthCod(line); char* compressedline = encode(line); char* decompressedline = decode(compressedline); printf("line = %s\n", line); printf("encoded line = %s\n", compressedline); printf("decoded line = %s\n", decompressedline); free(line); free(compressedline); free(decompressedline); return 1; } char* encode(char* src) { int rLen; char count[MAX_RLEN]; int len = strlen(src); char* dest = (char*)malloc(sizeof(char) * (len * 2 + 1)); int i, j = 0, k; char ch; for (i = 0; i < len; i++) { //dest[j++] = src[i]; ch = src[i]; rLen = 1; while (i + 1 < len && src[i] == src[i + 1]) { rLen++; i++; } sprintf(count, "%d", rLen); for (k = 0; *(count + k); k++, j++) { dest[j] = count[k]; } dest[j++]=ch; } dest[j] = '\0'; return dest; } char* decode(char* line){ char* result = (char*)malloc(LINE_SIZE); memset(result,0,LINE_SIZE); int enlen = strlen(line); int count=0; int j=0; for(int i=0; i 0){ result[j] = line[i]; j++; count--; } } } return result; } char* read_line(){ char* line=(char*)malloc(LINE_SIZE); memset(line,0,LINE_SIZE); char* r = fgets(line,LINE_SIZE,stdin); if(r==NULL||strlen(line)==1){ free(line); return 0; } else if (strlen(line)==LINE_SIZE-1 && line[LINE_SIZE]!='\n') { printf("string is too long\n"); } else{ int len = strlen(line); line[len-1] = '\0'; return line; } }