字符串压缩(Dev c++)

字符串压缩
1【问题描述】
编写一个使用简单方法压缩字符串的程序。
2【基本要求】
输入一个字符串(不超过 255 个字符)并寻找重复的字符。字母或标点符号的每个重复序列都被简化
为一个字符加上一个表示出现次数的整数(假设字符重复的最大次数为 255)。例如,“aaa”变成“a3”,
“ab”变成“a1b1”。如果压缩字符串比原始字符串长,则输出原始字符串。如果输入字符串包含数字,
则输出“error”而不是其他内容。测试样例如下:
1)输入:aaaaaa
输出:a6
2)输入:aaabcccc..a
输出:a3b1c4.2a1
3)输入: aaabab
输出: aaabab
4)输入: a1b2
输出: error
注意:如果的压缩方法导致压缩字符串比输入的长,则输出原始字符串。
运行代码如下:
#include <stdio.h>
#include <stdlib.h>
//自定义函数实现得到数组的实际长度 (也可以直接用库函数,但要注意strlen()函数判定结束条件是\0) 
int getlength(char c[]){
     char* q=c;
     int count=0;
     while(*q!=NULL){
         count++;
         q++;
    }
    return count;
};
int main(){
 char a[10];//定义两个数组,一个储存输入的数组,一个储存压缩后数组,以便之后比较; 
 char b[10];
 int i=0,k=0;
 char num='1';//num定义应与数组统一,否则会输出乱码; 
 scanf("%s",&a);
 int x=getlength(a);//调用函数获得字符实际长度; 
 //判断用户输入的字符串是否合法; 
 for(int j=0;j<x;j++){
     int m=(int)a[j];
     if(m>=49&&m<=57){
         printf("error");
         exit(0);//exit()函数,正常执行程序并关闭程序; 
     }
 }
 while(a[k]!=NULL)//直到数组某位置元素为NULL时结束循环; 
 { 
   if(a[k]==a[k+1])
   {
       k++; 
       num++; 
   } else{
      b[i]=a[k];
      b[i+1]=num;
      i+=2;
      num='1'; 
      k++;
   } 
 }
//比较压缩前后字符串长度,输出结果; 
    if(x>=i){
    puts(b);
   }else
   puts(a);
}
写完了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值