posts - 43,comments - 3,trackbacks - 0
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 阅读(269) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理