#include <iostream> #include <cassert> using namespace std; void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) { const char *p = pInputStr; int num = 1; int i = 0; p++; while(*p != NULL) { while(*p == *(p-1)&& *p != NULL) { num++; p++; } if (num > 1) { int size = 0; int temp = num; while(num) //计算位数 { size++; num /= 10; } num = 1; for (int j = size; j > 0; j--) { pOutputStr[i+j-1] = '0'+ temp%10; temp /= 10; } i +=size; pOutputStr[i++] = *(p-1); p++; }else{ pOutputStr[i++] = *(p-1); p++; } } pOutputStr[i] = '\0'; } int main() { char input[] = "cccddecc"; char *output = new char[strlen(input) + 1]; stringZip(input,strlen(input),output); cout<<output<<endl; return 0; }