鱼C论坛

 找回密码
 立即注册
查看: 1569|回复: 4

[已解决]牛客YoungManDon'tSayFive

[复制链接]
发表于 2023-10-2 12:22:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目链接:https://ac.nowcoder.com/acm/contest/19305/1040
#include <stdio.h>
int main()
{
    char buf[1000000]="";
    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;
}
只能通过73%,不知道该怎么改了
最佳答案
2023-10-2 12:22:41
这道题目是牛客网上的编程题目"YoungManDon'tSayFive"。

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

你的代码有两个问题:

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

修改后的代码如下:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char buf[1000000] = "";
  5.     fgets(buf, sizeof(buf), stdin);
  6.     for (int i = 0; i < sizeof(buf); i++)
  7.     {
  8.         if (buf[ i] == '5')
  9.         {
  10.             buf[ i] = '*';
  11.         }
  12.     }
  13.     printf("%s\n", buf);
  14.     return 0;
  15. }
复制代码


注意,这个代码仍然存在一个问题,就是在输入字符串长度超过1000000时会出现错误。可以使用动态内存分配来解决这个问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-2 12:22:41 | 显示全部楼层    本楼为最佳答案   
这道题目是牛客网上的编程题目"YoungManDon'tSayFive"。

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

你的代码有两个问题:

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

修改后的代码如下:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char buf[1000000] = "";
  5.     fgets(buf, sizeof(buf), stdin);
  6.     for (int i = 0; i < sizeof(buf); i++)
  7.     {
  8.         if (buf[ i] == '5')
  9.         {
  10.             buf[ i] = '*';
  11.         }
  12.     }
  13.     printf("%s\n", buf);
  14.     return 0;
  15. }
复制代码


注意,这个代码仍然存在一个问题,就是在输入字符串长度超过1000000时会出现错误。可以使用动态内存分配来解决这个问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-2 12:22:44 | 显示全部楼层
在这段代码中,有两处错误:

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

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

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

  1. #include <stdio.h>

  2. int main() {
  3.     char buf[1000000] = "";
  4.     fgets(buf, sizeof(buf), stdin);
  5.     for (int i = 0; i < sizeof(buf); i++) {
  6.         if (buf[ i] == '5') {
  7.             buf[ i] = '*';
  8.         }
  9.     }
  10.     printf("%s\n", buf);
  11.     return 0;
  12. }
复制代码


希望我的回答对你有所帮助。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-2 12:23:01 | 显示全部楼层
这段代码中,有两个问题:

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

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

下面是修改后的代码:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     char buf[1000000] = "";
  5.     fgets(buf, sizeof(buf), stdin);
  6.     for (int i = 0; i < sizeof(buf); i++)
  7.     {
  8.         if (buf[i] == '5') // 注意此处条件判断的语法
  9.         {
  10.             buf[i] = '*'; // 注意此处替换字符的语法
  11.         }
  12.     }
  13.     printf("%s\n", buf);
  14.     return 0;
  15. }
复制代码

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

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-2 12:28:39 | 显示全部楼层
isdkz 发表于 2023-10-2 12:22
这道题目是牛客网上的编程题目"YoungManDon'tSayFive"。

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

不知道为什么复制代码的时候,总是出错,我的就是这样子写的,但过不了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-12 02:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表