且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

压缩字符串

更新时间:2022-03-21 21:29:44

/*压缩字符串
输入只含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. }