c语言 压缩字符串:如AABBCCDDDD,输出2A2B2C4D,用C语言,求问
#include<stdio.h>
#include<string.h>
void main()
{
char s[51];
int i=0,j=1;
printf("请输入一个长度不超过五十的字符串(否则会越界出错):\n");
scanf("%s",s);
if(strlen(s)>50){
printf("输入不合要求!");
return;
}
while(i<strlen(s))
{
//j用于统计重复的字母个数
if(s[i]==s[i+1])
j++;
else{
printf("%d%c",j,s[i]);
j=1;//j重新计数
}
i++;
}
printf("\n");
}
不好意思昨晚写的,没仔细看,有错误。
温馨提示:内容为网友见解,仅供参考
第1个回答 2011-03-25
#include <stdio.h>
#include<string.h>
int main()
{
char p1[256],q,p2[256];
int i,j,n=0;
printf("请输入您想要压缩的字符串\n\t");
gets(p1);
j=0;
q=p1[0];
j++;
for(i=1;i<strlen(p1);i++)
{
if(q!=p1[i])
{
p2[n]=(j+48);
n++;
p2[n]=q;
n++;
j=0;
q=p1[i];
j++;
}
else
{
j++;
}
}
if(j==1)
{
p2[n]=(j+48);
n++;
p2[n]=q;
n++;
}
p2[n]='\0';
printf("压缩后的字符串是:%s\n",p2);
system("pause"); //暂停,查看结果
return 0;
}
第2个回答 2011-03-25
#include <stdio.h>
struct str
{
char ch;
int n;
}Str[26];//定义一个结构体
void main()
{
char s[20];
char ch;
int i,j;
printf("输入字符串\n");
gets(s);
//如果输入字符串没排序,增加一个排序过程
//下面只支持大写字母。
for(i=0;i<26;i++)
Str[i].n=0;
i=0;
j=0;
while(s[i]!='\0')
{
if(i==0) //第一个字符直接累加
{
ch=s[i];
j=ch-'A';
Str[j].ch=ch;
Str[j].n++;
i++;
continue;
}
while(s[i]!='\0'&&ch==s[i]) //如果相同,累加
{
j=ch-'A';
Str[j].ch=ch;
Str[j].n++;
i++;
}
ch=s[i];//不同的记录在结构体中
j=ch-'A';
Str[j].ch=ch;
Str[j].n++;
i++;
}
for(i=0;i<26;i++)
if(Str[i].n>0)
printf("%d%c",Str[i].n,Str[i].ch);
printf("\n");
}
Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答