您的位置:首页 > 其它

华为的一道机试题及答案(压缩字符串)

2014-02-12 17:48 344 查看
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

    1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。

    2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

要求实现函数: 

     void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
    输入pInputStr:  输入字符串lInputLen:  输入字符串长度
    输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例 

    输入:“cccddecc”   输出:“3c2de2c”

    输入:“adef”     输出:“adef”

    输入:“pppppppp” 输出:“8p”

下面是我自己编写的代码,供参考:

点击(此处)折叠或打开

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)

{

    char * pPre;

    char * pCur = '\0';

    char * pNext;

    strcpy(pOutputStr,pInputStr);

    int len = 0;

    for (pPre = (char *)pInputStr,pCur = (char *)pOutputStr; pPre != '\0' && len < lInputLen -1;len ++)

    {

        *pCur = *pPre;

        for (pNext = pPre+1;pNext != '\0';pNext++)//循环判断是否重复

        {

            if (*pNext == *pPre)

            {

                *pCur = '1' + pNext - pPre;//记录重复的个数

            }

            else

                break;

        }

        if (*pNext == '\0' && (pNext - pPre) == 1)//到达字符串的末尾

        {

            *(pCur+1) = '\0';

            break;

        }

        if ((pNext - pPre) == 1)//如果没有重复的

        {

            *pCur = *pPre;

            pCur++;

            pPre++;

        }

        else if((pNext - pPre) > 1)//有重复的

        {

            *++pCur = *pPre;

            pPre = pNext;

            *++pCur = *pPre;

        }

    }

}

例如输入:abcd

输出:



输入:cccddecc

输出:



输入:aaaaa

输出:



阅读(1271) | 评论(4) | 转发(0) |

0
上一篇:16道嵌入式C语言笔试面试题(经典!)

下一篇:虚函数和纯虚函数的区别

相关热门文章
web.py 学习 20140211

让php支持yar.packager,可以...

世界杰出华商协会十大冤 中非...

安装apk时选择错误的CPU_ABI...

html5记录

test123

编写安全代码——小心有符号数...

使用openssl api进行加密解密...

一段自己打印自己的c程序...

sql relay的c++接口

一个简单的shell脚本问题...

网站如何做图片的防盗链功能呢...

如何将printf输出的字符(含有...

嵌入式linux wifi移植 libert...

Ø ⊆ {Ø} 是否是对的 ,这么...

给主人留下些什么吧!~~





weiweipossible2013-12-12 21:40:38
void strzip(char* in, int len, char* o)
{
    int i, accum, zip, off;
    char prev;

    for(i = 0,accum = 0,prev = in[0],zip = 0,off = 0 ;
          i <= len ; i++)
    {
        if(prev == in[i])
       &
回复 | 举报





dongliyun2013-12-12 10:29:21
triyes:aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?
貌似这样就不对了,问题出在*pCur = '1' + pNext - pPre;//记录重复的个数 这里,有空我再修改一下。回复 | 举报





husty8662013-12-11 07:20:24
I guess it is:
Ma
回复 | 举报





triyes2013-12-10 23:15:05
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
这个输入会有啥输出?
回复 | 举报

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: