zoukankan      html  css  js  c++  java
  • 1078. 字符串压缩与解压 (20)

    文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。

    解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。

    本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。

    输入格式:

    输入第一行给出一个字符,如果是 C 就表示下面的字符串需要被压缩;如果是 D 就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过1000个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过1MB。

    输出格式:

    根据要求压缩或解压字符串,并在一行中输出结果。

    输入样例 1:
    C
    TTTTThhiiiis isssss a   tesssst CAaaa as
    
    输出样例 1:
    5T2h4is i5s a3 te4st CA3a as
    
    输入样例 2:
    D
    5T2h4is i5s a3 te4st CA3a as10Z
    
    输出样例 2:
    TTTTThhiiiis isssss a   tesssst CAaaa asZZZZZZZZZZ
    

    代码:
    #include <cstdio>
    #include <cstring>
    using namespace std;
    char s[1000],ch;
    
    void Compress()
    {
        int i = -1;
        while(s[++ i])
        {
            int j = i;
            while(s[++ j] == s[i]);
            if(j - i > 1)printf("%d",j - i);
            putchar(s[i]);
            i = j - 1;
        }
    }
    void Extract()
    {
        int i = -1;
        while(s[++ i])
        {
            if(s[i] >= '0' && s[i] <= '9')
            {
                int d = s[i] - '0';
                while(s[i + 1] >= '0' && s[i + 1] <= '9')
                {
                    d = d * 10 + s[++ i] - '0';
                }
                for(int j = 0;j < d;j ++)
                {
                    putchar(s[i + 1]);
                }
                i ++;
            }
            else putchar(s[i]);
        }
    }
    int  main()
    {
        scanf("%c",&ch);
        getchar();
        gets(s);
        if(ch == 'C')Compress();
        else Extract();
    }
  • 相关阅读:
    Linux操作系统定时任务系统 Cron 入门
    ssh命令远程登录
    jQuery 中 attr() 和 prop() 方法的区别
    javascript深入理解js闭包
    怎样使用Markdown
    顺颂商祺
    利用Code128字体将文本转换为code128条形码
    如何看懂Code128条形码
    SSH原理及操作
    ssh 22端口号拒绝
  • 原文地址:https://www.cnblogs.com/8023spz/p/8081832.html
Copyright © 2011-2022 走看看