ZachariahAkira 2023-03-04 11:34 采纳率: 0%
浏览 72

xdoj398使用puts和printf的不同结果

xdoj398题:
标题:字符串压缩

问题描述:有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串

img

可压缩为

img

请设计一个程序,采用该压缩方法对字符串压缩并输出。请编写一个函数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),该字符串只包含大小写字母。
主函数输出说明:
输出一个数据,表示压缩后的字符串。
主函数输入样例:

img

主函数输出样例:

img

我是这样写的:

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;
}



img


为例,在输出的时候,使用dev c++什么都没输出:

img


使用vs2022输出乱码:

img

如果改成

printf(“%s”,ps);

则dev c++仍然是空白,vs输出正确

img

请问各位:为什么dev c++输出空白?vs第一次的乱码是如何产生的?我的代码怎样改能符合题目要求?
注:vs调试时看到一切都好好的(

img

  • 写回答

3条回答 默认 最新

  • 滴水不穿石 2023-03-04 12:02
    关注

    arr2这个变量要定义为静态!
    因为局部变量在函数返回后其空间可能被回收了
    static char arr2[100]={'\0'};

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月4日

悬赏问题

  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?