1 char* compressString(char* S) 2 { 3 int i, len; 4 int cnt = 1; 5 int j = -1; 6 char dealS[500000]; 7 memset(dealS, ‘0‘, 500000); 8 9 char ch = S[0]; 10 for (i = 0; S[i]; i++); //测量长度 其实可以用strlen 11 len = i; 12 if (len == 1) 13 return S; 14 for (i = 1; i < len+1; i++) //len+1是为了防止还没等压缩就因为到了末尾而跳出遍历了了 15 { 16 if (ch == S[i]) 17 { 18 cnt++; 19 } 20 else 21 { 22 dealS[++j] = ch; 23 if (cnt < 10) //判断计数器大于还是小于0 24 { 25 dealS[++j] = (char)(cnt + 48); 26 } 27 else 28 { 29 char buffer[25]; 30 sprintf(buffer, "%d", cnt); 31 for (int k = 0; buffer[k]; k++) 32 { 33 dealS[++j] = buffer[k]; 34 } 35 } 36 37 ch = S[i]; 38 i--; 39 cnt = 0; 40 } 41 } 42 43 dealS[++j] = ‘\0‘; 44 return strlen(dealS) < strlen(S) ? dealS : S; 45 }
原文:https://www.cnblogs.com/ZhengLijie/p/12502660.html