本题要求实现一个字符串压缩的简单函数。压缩规则是:如果某个字符x
连续出现n
(n>1)次,则将这n
个字符x
替换为nx
的形式;否则保持不变。
函数接口定义:
void zip( char *p );
函数zip
对p
指向的字符串进行压缩操作。
样例:
#include <stdio.h>
#define MAXS 20
void zip( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
zip(s);
printf("%s\n", s);
return 0;
}
/* 请在这里填写答案 */
输入样例:
Mississippi
输出样例:
Mi2si2si2pi
代码如下:
#include<string.h>
void zip( char *p )
{
int cout=1;//用于计算重复字符的个数
int j=0,m;
int len=strlen(p); //计算字符串长度
for(m=0;m<len;m++)
{
if(p[m]==p[m+1])
cout++; //如果该元素和后一个元素相等加1
else if(p[m]!=p[m+1])
{
if(cout==1) //cout等于1时的情况
{
p[j]=p[m];
j++;
cout=1;//重置cout的值
}
else if(cout>1&&cout<=9)//cout等于1时的情况
{
p[j]=cout+48;//将int型数据转化为char型数据,也可以是( p[j]=cout+‘0’;)
j++;
p[j]=p[m];
j++;
cout=1;
}
else if(cout>=10)//cout大于等于10时的情况
{
p[j]=(cout/10)+48;
j++;
p[j]=(cout%10)+48;
j++;
p[j]=p[m];
j++;
cout=1;
}
}
}
p[j]='\0';
}
特别感谢博主 一键清风