牛客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%,不知道该怎么改了 这道题目是牛客网上的编程题目"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时会出现错误。可以使用动态内存分配来解决这个问题。 在这段代码中,有两处错误:
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;
}
希望我的回答对你有所帮助。
如果问题已经解决,请设置最佳答案 这段代码中,有两个问题:
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:}
isdkz 发表于 2023-10-2 12:22
这道题目是牛客网上的编程题目"YoungManDon'tSayFive"。
根据题目,我们需要将输入的字符串中的所有5替 ...
不知道为什么复制代码的时候,总是出错,我的就是这样子写的,但过不了
页:
[1]