2.4 Encoding(编 码)

                                    2.4 Encoding

2.4.1 时空限制

          Time limit: 1 Seconds Memory limit: 32768K 

2.4.2 题目内容

          Given a string containing only “A” – “Z”, we could encode it using the following method:
          (1) Each sub-string containing k same characters should be encoded to “kX ” where “X ” is the only character in this sub-string. 
           (2) If the length of the sub-string is 1, “1” should be ignored. 

        Input

         The first line contains an integer N (1≤N ≤100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only “A” – “Z” and the length is less than 100. 

        Output 

           For each test case, output the encoded string in a line. 

        Sample Input

           2 
           ABC 
           ABBCCC 

        Sample Output 

           ABC 
           A2B3C 

2.4.3 题目来源

           Zhejiang Provincial Programming Contest 2005 (Author: ZHANG, Zheng) 

2.4.4 汉语翻译

1.题目
                                                         编 码

给定一个只包含“A”~“Z”的字符串,我们使用下面的方法给它编码:
(1)将子字符串中的 k 个相同字符写成“kX ”,X 是子串中的字符。
(2)如果子串的长度是 1,那么“1”要忽略。

2.输入描述

第一行包含一个正整数 N(1≤N≤100),代表测试案例的个数。下面 N 行包含 N 个字符串。每个字符串仅包含“A”~“Z”,且字符串的长度小于 100。

3.输出描述

对于每个测试案例,输出它的编码在单独一行上。

4.输入描述

        2 
        ABC 
        ABBCCC 

5.输出描述

        ABC 
        A2B3C 

2.4.5 解题思路

       本题是作一种简单的编码,把一个字符串中连续重复的字母从左到右写成 kX 的形式,如果 k 是 1,那么,1 就要省略。
       本题的考察重点是对连续重复字符的处理,这种处理是字符串处理中常考的技巧。
       由于 ACM 的判题系统只会比对输出结果的形式是否与要求的一致,不会考虑数据类型,所以,不要先把编码全部完成后一次性输出,而是要一边计算,一边输出结果,这点很重要。

4.4.6 参考答案

#include <iostream>
#include <string>  
using namespace std; 
int main(int argc, char* argv[]) 
{
    string s,t; 
    int n; 
    cin>>n; 
    for(int i=0;i<n;i++) 
	{ 
		cin>>s; 
        int c=0; 
        t=s[0]; 
        int temp=0; 
        for(int j=0;j<s.size();j++) 
		{ 
			if(s[j]==t[0]) 
			{ 
				temp++; 
               //如果已是最后一个,直接输出
                if(j==s.size()-1) 
				{ 
					if(temp==1)cout<<t[0]; 
					else cout<<temp<<t[0]; 
				} 
			} 
			else 
			{ 
				if(temp==1)cout<<t[0]; 
				else cout<<temp<<t[0]; 
                t[0]=s[j]; 
                temp=1; 
                //如果已是最后一个,直接输出
                if(j==s.size()-1) 
				{  
					if(temp==1)cout<<t[0]; 
                    else cout<<temp<<t[0]; 
				} 
			} 
		} 
       cout<<endl; 
	} 
    return 0; 
} 





 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值