C语言编写程序,本题要求实现一个字符串压缩的简单函数。压缩规则是:如果某个字符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
时间: 2024-03-07 22:46:49 浏览: 76
参考代码如下:
```c
#include <stdio.h>
#include <string.h>
#define MAXS 20
void zip(char *p);
int main()
{
char s[MAXS];
fgets(s, MAXS, stdin);
zip(s);
printf("%s", s);
return 0;
}
void zip(char *p)
{
char t[MAXS];
int cnt = 1, len = strlen(p);
t[0] = p[0];
int i;
for (i = 1; i <= len; i++)
{
if (p[i] == p[i - 1])
{
cnt++;
}
else if (cnt > 1)
{
t[strlen(t)] = cnt + '0';
cnt = 1;
t[strlen(t)] = p[i - 1];
}
else
{
t[strlen(t)] = p[i - 1];
}
}
t[strlen(t)] = '\0';
strcpy(p, t);
}
```
其中,zip函数的实现如下:
1. 定义一个临时变量t,用于存储压缩后的字符串。
2. 定义一个计数器cnt,用于记录当前字符出现的次数。
3. 从头到尾遍历字符串p,如果当前字符与上一个字符相同,则cnt加1;否则,判断上一个字符出现的次数是否大于1,如果大于1,则在t中加入cnt和上一个字符,否则直接加上一个字符。最后,将t的内容复制到p中即可。
需要注意的是,由于t是一个新的字符串,因此需要在字符串末尾添加一个结束符'\0'。
阅读全文