压缩字符串-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

压缩字符串

简介: /*压缩字符串 输入只含A-Z的字符串 不超过1000个字母 将连续相同字母压缩为重复次数+字母 例 输入 ABBCCC 输出 A2B3C */ #include int main() { int i,count; char tch,str[1005];...
/*压缩字符串
输入只含A-Z的字符串 不超过1000个字母 将连续相同字母压缩为重复次数+字母
例
输入
ABBCCC
输出
A2B3C
*/
#include <stdio.h>
int main()
{
	int i,count;
	char tch,str[1005];//存储字符串最长1000个字符
	while(gets(str))//输入字符
	{
		count = 1;
		tch = str[0];//取出str[0]
		for(i=1; str[i] != '\0' ;++i)//str[0-i]判断遇到\0结束
		{
			if(tch == str[i])//第一个str[0]与str[i]重复
				++count;
			else             //不重复
			{
				if(1 == count)//**加上好,不加会不能AC
					printf("%c",tch);
				else   
					printf("%d%c",count,tch);//打印A2B3C
				count = 1;
				tch = str[i];//改变tch,下次从tch开始判断
			}
		}
		if(1 == count)
			printf("%c\n",tch);
		else
			printf("%d%c\n",count,tch);
	}
	return 0;
}

另外:

把字符串中出现的连续相同的多个字符使用该字符以及出现的次数表示,例如ABBCCC中的BB可以使用2B表示,可以使用3C表示。题目要求对给定的字符串编码。

解题思路:遍历字符串,取出每个字符与之前的字符进行比较,如果相等计数加1,不相同,则从新计数。例如ABBCCC,可以处理如下。

先初始化,c表示前一个字符,count表示统计次数。c=’0’,count=0。

对于A,之前没有字符,count=1,c=’A’;

对于B,之前的字符是’A’,输出A,count=1,c=’A’;

对于B,之前的字符是’B’,count=2;

对于C,之前的字符是’B’,输出2B,count=1,c=’C’;

对于C,之前的字符是’C’,count=2;

对于C,之前的字符是’C’,count=3;

最后输出3C。

输出的结果是A2B3C

参考代码如下:

  1. /*
  2. * 字符串编码
  3. */
  4. public static void test5(String str){
  5. int count=1;
  6. char c=str.charAt(0);
  7. for(int i=1;i<str.length();i++){
  8. if(str.charAt(i)==c){
  9. count++;
  10. }else{
  11. if(count!=1)
  12. System.out.print(count);
  13. System.out.print(c);
  14. count=1;
  15. c=str.charAt(i);
  16. }
  17. }
  18. if(count!=1)
  19. System.out.print(count);
  20. System.out.print(c);
  21. }


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章