PAT Basic 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 <iostream>
#include <vector>
using namespace std;
struct node{
    char ch;int val;
};
vector<node> v;
int main()
{
    char ch;string str;
    cin>>ch;getline(cin,str);
    getline(cin,str);
    if(ch==‘C‘){//压缩
        v.push_back({str[0],1});
        for(int i=1;i<str.length();i++)
            if(str[i]==str[i-1]) v[v.size()-1].val++;
            else v.push_back({str[i],1});
        for(int i=0;i<v.size();i++)
            if(v[i].val==1) printf("%c",v[i].ch);
            else printf("%d%c",v[i].val,v[i].ch);
    }else{//解压
        int coun=0;
        for(int i=0;i<str.length();i++){
            if(coun==0&&!isdigit(str[i])) v.push_back({str[i],1});
            else if(isdigit(str[i])) coun=coun*10+(str[i]-‘0‘);
            else {
                v.push_back({str[i],coun});
                coun=0;
            }
        }
        for(int i=0;i<v.size();i++)
            while(v[i].val--) printf("%c",v[i].ch);
    }
    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/littlepage/p/11707220.html

时间: 2024-11-06 02:18:19

PAT Basic 1078 字符串压缩与解压 (20 分)的相关文章

PTA乙级(1078 字符串压缩与解压 (20分))

1078 字符串压缩与解压 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std

PAT 1078. 字符串压缩与解压

PAT 1078. 字符串压缩与解压 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符没有重复,就原样输出.例如 aba 压缩后仍然是 aba. 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc. 本题需要你根据压缩或解压的要求,对给定字符串进行处理.这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串. 输入格式: 输入第一行给出一个字符,如果

1078 字符串压缩与解压

题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805262018265088 题解: 1 #include <iostream> 2 #include<cstdio>//getchar所需的头文件 3 #include<string> 4 using namespace std; 5 6 int main() { 7 char select; 8 cin >> selec

记录新项目中遇到的技术及自己忘记的技术点【DES加密解密,MD5加密,字符串压缩、解压,字符串截取等操作】

一.DES加密.解密 #region DES加密解密 /// <summary> /// 进行DES加密 /// </summary> /// <param name="pToEncrypt">要加密的字符串</param> /// <param name="sKey">密钥,必须为8位</param> /// <returns>以Base64格式返回的加密字符串</retur

(python3) 字符串压缩与解压

题目赘述: 本题需要你根据压缩或解压的要求,对给定字符串进行处理.这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串. 输入格式: 输入第一行给出一个字符,如果是 C 就表示下面的字符串需要被压缩:如果是 D 就表示下面的字符串需要被解压.第二行给出需要被压缩或解压的不超过1000个字符的字符串,以回车结尾.题目保证字符重复个数在整型范围内,且输出文件不超过1MB. 输出格式: 根据要求压缩或解压字符串,并在一行中输出结果. 输入样例 1:CTTTTThhiiiis isssss

C#字符串压缩与解压

1 public static string CompressString(string str) 2 { 3 var compressBeforeByte = Encoding.GetEncoding("UTF-8").GetBytes(str); 4 var compressAfterByte = Compress(compressBeforeByte); 5 string compressString = Convert.ToBase64String(compressAfterB

字符串的压缩与解压

public static string compress(string aString) { if (string.IsNullOrEmpty(aString)) return ""; StringBuilder sb = new StringBuilder(); byte[] byteArray = CompressByte(aString); foreach (byte item in byteArray) sb.Append((char)item); return sb.ToS

C#压缩与解压

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Checksums; using System.Runtime.InteropServices; namespace Common { /// <summary>

python zlib 压缩与解压

例子1:压缩与解压字符串 import zlib message = 'abcd1234' compressed = zlib.compress(message) decompressed = zlib.decompress(compressed) print 'original:', repr(message) print 'compressed:', repr(compressed) print 'decompressed:', repr(decompressed) 结果 original: