lsmCC 发表于 2023-10-2 12:22:34

牛客YoungManDon'tSayFive

题目链接:https://ac.nowcoder.com/acm/contest/19305/1040
#include <stdio.h>
int main()
{
    char buf="";
    fgets(buf,sizeof(buf),stdin);
    for(int i=0;i<sizeof(buf);i++)
    {
      if(buf=='5')
      {
            buf='*';
      }
    }
    printf("%s\n",buf);
    return 0;
}
只能通过73%,不知道该怎么改了

isdkz 发表于 2023-10-2 12:22:41

这道题目是牛客网上的编程题目"YoungManDon'tSayFive"。

根据题目,我们需要将输入的字符串中的所有5替换成*,然后输出替换后的字符串。

你的代码有两个问题:

1. 在判断字符是否为5时,应该使用 buf[ i] 而不是 buf 。
2. 在替换字符时,应该使用单引号 ' ' 而不是双引号 " " 。

修改后的代码如下:

#include <stdio.h>

int main()
{
    char buf = "";
    fgets(buf, sizeof(buf), stdin);
    for (int i = 0; i < sizeof(buf); i++)
    {
      if (buf[ i] == '5')
      {
            buf[ i] = '*';
      }
    }
    printf("%s\n", buf);
    return 0;
}


注意,这个代码仍然存在一个问题,就是在输入字符串长度超过1000000时会出现错误。可以使用动态内存分配来解决这个问题。

陶远航 发表于 2023-10-2 12:22:44

在这段代码中,有两处错误:

1. 在第 5 行代码中,判断字符是否为 '5' 时,使用了错误的比较方式。应该将 buf[ i] 与字符常量 '5' 进行比较,即 buf[ i] == '5'。

2. 在第 6 行代码中,将字符 '5' 替换为字符 '*' 时,使用了错误的赋值方式。应该将 buf[ i] 赋值为字符常量 '*',即 buf[ i] = '*'。

综上所述,修改后的代码如下:

#include <stdio.h>

int main() {
    char buf = "";
    fgets(buf, sizeof(buf), stdin);
    for (int i = 0; i < sizeof(buf); i++) {
      if (buf[ i] == '5') {
            buf[ i] = '*';
      }
    }
    printf("%s\n", buf);
    return 0;
}


希望我的回答对你有所帮助。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-2 12:23:01

这段代码中,有两个问题:

1. 在循环中,应该判断 buf 是否等于 '5'。

2. 在判断中,应该将 '5' 用单引号括起来,表示字符类型,而不是使用双引号,表示字符串类型。同时,在替换字符时,应该使用单引号将要替换的字符括起来。

下面是修改后的代码:


#include <stdio.h>

int main()
{
    char buf = "";
    fgets(buf, sizeof(buf), stdin);
    for (int i = 0; i < sizeof(buf); i++)
    {
      if (buf == '5') // 注意此处条件判断的语法
      {
            buf = '*'; // 注意此处替换字符的语法
      }
    }
    printf("%s\n", buf);
    return 0;
}


修正后的代码中,循环中的判断语句使用了 buf,判断当前的字符是否为 '5'。在替换字符时,使用了单引号将要替换的字符 '*' 括起来。此外,还可以将循环终止条件修改为 i < strlen(buf),即只要未遍历到字符串结尾,就继续循环。

希望能够解决你的问题,如有其他疑问请随时追问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

lsmCC 发表于 2023-10-2 12:28:39

isdkz 发表于 2023-10-2 12:22
这道题目是牛客网上的编程题目"YoungManDon'tSayFive"。

根据题目,我们需要将输入的字符串中的所有5替 ...

不知道为什么复制代码的时候,总是出错,我的就是这样子写的,但过不了
页: [1]
查看完整版本: 牛客YoungManDon'tSayFive