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

    文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 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
    
     
    思路:根据两种情况模拟就行了,注意字符串解压时可能长度不止个位数的情况......
     
     1 #include<stdio.h>
     2 #include<math.h>
     3 #include<string.h>
     4 #include<stdlib.h>
     5 int main()
     6 {
     7     char flag,ch;
     8     char str[10000];
     9     scanf("%c",&flag);
    10     getchar();
    11     if(flag=='C')
    12     {
    13         gets(str);
    14         int len=strlen(str);
    15         int count=1;
    16         for(int i=0;i<len;i++)
    17         {   
    18             
    19             if(str[i]==str[i+1])
    20                 count++;
    21             else if(str[i]!=str[i+1])
    22             {
    23                 if(count>1)
    24                 {
    25                     printf("%d%c",count,str[i]);
    26                     count=1;
    27                 }
    28                 else
    29                 {
    30                     printf("%c",str[i]);
    31                     count=1;
    32                 }
    33             }
    34             
    35         }
    36     }
    37     else if(flag=='D')
    38     {
    39         gets(str);
    40         int len=strlen(str);
    41         int sum=0;
    42         for(int i=0;i<len;i++)
    43         {
    44             if(str[i]>='0'&&str[i]<='9')
    45             {
    46                 sum=sum*10+(str[i]-'0');    
    47             }
    48             else
    49             {
    50                 if(sum>1)
    51                 {
    52                     for(int j=0;j<sum;j++)
    53                         printf("%c",str[i]);
    54                     sum=0;
    55                 }
    56                 else 
    57                 {
    58                     printf("%c",str[i]);
    59                     sum=0;
    60                 }
    61             }
    62         }
    63     }
    64     return 0;
    65 }
    大佬见笑,,
  • 相关阅读:
    1.数据结构《Pytorch神经网络高效入门教程》Deeplizard
    plt.figure()的使用,plt.plot(),plt.subplot(),plt.subplots()和图中图
    可变长参数
    np.linspace,numpy中的linspace()
    python和numpy中sum()函数的异同
    maven install 错误
    spring boot启动后执行方法
    java 定时任务多线程处理
    java 生成txt文件
    java 方法超时
  • 原文地址:https://www.cnblogs.com/xwl3109377858/p/10489474.html
Copyright © 2011-2022 走看看