xdoj398题:
标题:字符串压缩
问题描述:有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串
可压缩为
请设计一个程序,采用该压缩方法对字符串压缩并输出。请编写一个函数compress,采用该压缩方法对字符串src进行压缩。函数定义如下:
char *compress(char *src);
返回值:
指向压缩后的字符串数据
参数:
src:输入/输出参数,输入表示待压缩字符串,输出表示压缩后的字符串
注意:函数声明已包含在主程序中,不需要自己定义。只需要提交自定义的函数代码。
主程序如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *compress(char *src);
int main()
{
char src[100];
scanf("%s",src);
char *ps = compress(src);
puts(ps);
return 0;
}
主函数输入说明:
输入第一行为源字符串src(长度小于100),该字符串只包含大小写字母。
主函数输出说明:
输出一个数据,表示压缩后的字符串。
主函数输入样例:
主函数输出样例:
我是这样写的:
char* compress(char* src)
{
int i = 0; int i2 = 0;
char arr2[100] = {0};
for (i = 0; i < strlen(src) - 1; i++)
{
arr2[i2] = src[i]; //第一个字母
i2++;
if (src[i] == src[i + 1] && src[i] == src[i + 2]) //判断是否连续出现三次
{
int count = 1; int t = 0;
for (t = i; t < strlen(src) - 1; t++)
{
if (src[t] == src[t + 1])
{
count++; //计算共出现几次
}
else
break;
}
if (count >= 10)
{
arr2[i2] = 1 + '0'; //将出现次数写上;如果是十次或以上要这样写。(按题目要求不可能有一百次)
i2++;
arr2[i2] = count - 10 + '0';
}
else
{
arr2[i2] = count + '0';
}
i2++;
i += (count - 1);
}
else
{
}
}
arr2[i2 + 1] = '\0';
return arr2;
}
以
为例,在输出的时候,使用dev c++什么都没输出:
使用vs2022输出乱码:
如果改成
printf(“%s”,ps);
则dev c++仍然是空白,vs输出正确
请问各位:为什么dev c++输出空白?vs第一次的乱码是如何产生的?我的代码怎样改能符合题目要求?
注:vs调试时看到一切都好好的(