鱼C论坛

 找回密码
 立即注册
查看: 1213|回复: 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. 在替换字符时,应该使用单引号 ' ' 而不是双引号 " " 。

修改后的代码如下:
#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;
}

注意,这个代码仍然存在一个问题,就是在输入字符串长度超过1000000时会出现错误。可以使用动态内存分配来解决这个问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

你的代码有两个问题:

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

修改后的代码如下:
#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;
}

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

使用道具 举报

发表于 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[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;
}

希望我的回答对你有所帮助。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

不知道为什么复制代码的时候,总是出错,我的就是这样子写的,但过不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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