gpt4 book ai didi

c - 将 n(n>=2) '*' 符号行替换为 n/2 '+' 符号

转载 作者:行者123 更新时间:2023-11-30 20:25:51 26 4
gpt4 key购买 nike

仅使用 getchar() 和 putchar()。例如,输入 "asf****f*d" 您会得到 "asf++f*d"。输入端的信号是符号'.'。我最好的尝试是:

char c = 0, flag = 0; int k = 0;
while ((c = getchar()) !='.')
{
if (c == '*') { k++; flag = 1; } else putchar(c);
if (flag)
{
if (c != '*')
{
flag = 0;
if (k == 1) { putchar('*'); k = 0; continue; }
for (int i = 0; i< k/2; i++)
putchar('+');
k = 0;
}
}
}

该代码不起作用。我尝试交换这两个 if:

 char c = 0, flag = 0; int k = 0;
while ((c = getchar()) !='.')
{

if (flag)
{
if (c != '*')
{
flag = 0;
if (k == 1) { putchar('*'); k = 0; continue; }
for (int i = 0; i< k/2; i++)
putchar('+');
k = 0;
}
}
if (c == '*') { k++; flag = 1; } else putchar(c);
}

但是在执行完单个“*”之后的符号后,不会打印,即输入 "asf****f*d" 我得到 "asf++f*"

最佳答案

您的第二次尝试成功的机会最大,但由于您使用了继续,控制流程变得困惑。许多人都从这个声明中得到安慰,但在这种情况下,它只是一个糟糕的goto。请使用else来转义嵌套的if;画一个NSD如果你觉得这很困难。目前,continue 会跳过第二个代码示例中的 putchar(c),这解释了单个星号后面的字符丢失的原因。

还有另一个问题;如果关闭周期之前紧接着是星星列表,则替换加号将不会被打印。这是因为您一次性保存了所有星星并打印了替换的加号。这种“缓冲”需要“刷新”。虽然这并不困难(在外循环完成后打印待处理的加号),但它确实使您的代码变得更加困惑。我强烈建议稍微改变你的算法。无需保存星星,只需为每第二颗星星打印一个加号即可。这将使您的代码更简单、更清晰,并且不再需要“刷新”。

我当然可以给你一个完整的解决方案,但是这有什么乐趣呢?

关于c - 将 n(n>=2) '*' 符号行替换为 n/2 '+' 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com