码迷,mamicode.com
首页 > 其他好文 > 详细

字符串压缩

时间:2014-08-24 20:49:03      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   数据   ar   

二、题目描述(40分):
通过键盘输入一串小写字母(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”

这题还有点难,填数据时当时没想到可以先填后面再填前面...

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
void itoa(int n, char *&str)
{
    char *p = str;
    char *p1 = str;
    char temp;
    int len = 0;
    if (n < 0)
    {
        *p++ = -;
        n = -n;
    }
    do
    {
        *p++ = n % 10 + 0;
        n = n / 10;
        len++;
       // printf("n%d ",n);
    }while(n > 0);
   // printf("ss%d %s",len,p);
    *p-- = \0;
    //printf("%d %s",len,p);
    //if(len % 2 == 1)
    //    len++;
    for( len /= 2; len > 0; len--){
         temp = *p;
        *p-- = *str;
        *str++ = temp;
    }
    str = p1;
}
void stringZip1(const char *pInputStr, long lInputLen, char *pOutputStr)
{
    const char *p = pInputStr;
    int j,num,s,i;
    j = 0;
    num = 1;
    p++;
    while( *p != \0)
    {
        while( *p == *(p-1) && *p != \0)
        {
            p++;
            num++;
        }
        if( num > 1)
        {
            s = 0;
            int k;
            int temp = num;
            while(num > 0)
            {
                num /= 10;
                s++;
            }
            for(i=j,k=0; k < s; i--,k++)
            {
                pOutputStr[i+s-1] = temp % 10 + 0;
                temp /= 10;
            }
            j += s;
            pOutputStr[j++] = *(p-1);
            num = 1;
            p++;
        }
        else
            {
                pOutputStr[j++] = *(p-1);
                p++;
            }
        }
    if (*(p-1) != *(p-2))
        pOutputStr[j++] = *(p-1);
    pOutputStr[j] = \0;
    printf("%s\n",pOutputStr);

}
int main()
{
    char s[40],s1[40];
    char *s2 = (char*)malloc(sizeof(char) * 40);
    while(scanf("%s",s))
    {
        stringZip1(s,strlen(s),s1);
    }

}

bubuko.com,布布扣

 

貌似自己写的itoa没有用到,因为后来发现用了反而不好操作...

字符串压缩

标签:style   blog   http   color   os   io   for   数据   ar   

原文地址:http://www.cnblogs.com/george-cw/p/3933384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!