一、原理
在网络传输中或者语音视频通信中,为了减少传输带宽,数据压缩应运而生,字符串压缩尤为常见,比如:abbbcdddd,压缩后为a1b3c1d4。
设置计数器count,遍历一遍字符串,每次指针移动一个字符,判断当前字符是否与前一字符相等,如果相等,则计数器count加1,指针继续下移,否则,对已经遍历的字符串进行处理,然后重新初始化计数器count,如此这般直到字符串遍历结束。
二、实现
#include
char* compress(char *i_szArray, char *o_szArray)
{
if ((NULL == i_szArray) || (NULL == o_szArray))
{
return NULL;
}
int count = 1;
int index = 0;
int i = 0;
char *temp = i_szArray;
for (i=1; *temp++!='\0'; i++)
{
if (i_szArray[i] == i_szArray[i-1])
{
++count;
}
else
{
o_szArray[index] = i_szArray[i-1];
++index;
sprintf(o_szArray+index, "%d", count);
count = 1;
++index;
}
}
return o_szArray;
}
int main()
{
char i_szArray[] = "abbbcdddd";
char o_szArray[10] = {0};
printf("src=%s-->dest=%s\n", i_szArray, o_szArray);
printf("src=%s-->dest=%s\n", i_szArray, compress(i_szArray, o_szArray));
return 0;
}
阅读(447) | 评论(0) | 转发(0) |