2.1
实现如下编码算法,对于重复2-9次数的字符,用两个数字表示,即NX(其中N为重复的次数,X为重复的字符,下同),超过九个则先输出9X,然后处理剩下的字符。对于连续的不重复的字符,则两边加1来封字符串。如果被封的字符串其中有数字为1,则用1来转义。
示例: AAAAAABCCCC -> 6A1B14C, 12344 ->
11123124。。。(下面的框架是用C++语言写的。你可以用你熟悉的语言。)
void encode (const char* text, char* dest)
text
为需要编码的字符串,dest表示编码输出的目标空间,而空间足够大。
#include <iostream>
#include <stdio.h>
const int N = 9;
using namespace std;
void encode (const char *text, char *dest)
{
char const *pCur = text;
while(*pCur != '\0')
{
if ( *pCur != *(pCur+1) )
{
*dest++ = '1';
while( (*pCur != '\0') && *pCur != *(pCur + 1) )
{
*dest++ = *pCur++;
if (*(dest-1) == '1') *dest++ = '1';
}
*dest++ = '1';
}
else
{
int count = 1;
while( *pCur && *pCur == *(pCur + 1) )
{
++pCur;
++count;
if (count == N)
{
break;
}
}
++pCur;
*dest++ = '0' + count;
*dest++ = *(pCur-1);
}
*dest = 0;
}
}
void main (void)
{
const char* s="AAAAAABCCCC12345DDDDDDDDDDDDDDDDDDDDDD1DD12344XXX11123433677777";
char d[100]="";
encode(s, d);
printf("Google\n");
printf("text=%s;\ndest=%s;\n",s,d);
}
posted on 2008-03-10 14:56
RUI 阅读(283)
评论(0) 编辑 收藏 引用