字符串压缩
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);
}
#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);
}
写完了。