C 替换所有选项卡的代码,以及单个空格是否有超过1个空格?
这个问题在练习1.9中。我编写了以下代码:C 替换所有选项卡的代码,以及单个空格是否有超过1个空格?,c,C,这个问题在练习1.9中。我编写了以下代码: #include<stdio.h> main() { int c,i=0,n=0; while((c=getchar())!=EOF) { if(c!=' '||c!='\t') { i=0; putchar(c); } else if(c==' '||c=='\t') {
#include<stdio.h>
main()
{
int c,i=0,n=0;
while((c=getchar())!=EOF)
{
if(c!=' '||c!='\t')
{
i=0;
putchar(c);
}
else if(c==' '||c=='\t')
{
i++
}
if((c+1)!=' '||(c+1)!='\t')
n=i;
if(n!=0)
{
c=' ';
putchar(c);
}
}
}
但我无法获得所需的输出。我在ubuntu中使用gcc。当我输入类似hello\t\ta的内容作为输入时,我的输出为hello\\\\\ a,即制表符的编号替换为空格的编号,当我输入hello\\ u\\ a时,我的输出与输入相同
请帮助我,或者建议我一些新的方法来获得所需的输出。问题是:您想检查下一个字符,但检查当前字符的值增加了一个。问题是:您想检查下一个字符,但是您检查当前字符的值是否增加了1。方法有点错误,这里有一个提示,将最后一个字符保持为状态,如果新输入的字符是空格,而最后一个字符是空格,则不输出,只需返回循环并等待下一个字符
如果当前字符不是空格,则输出并更新状态…方法稍有错误,这里有一个提示,将最后一个字符保留为状态,如果新输入的字符是空格,最后一个字符是空格,则不输出,只需返回循环并等待下一个字符
如果当前字符不是空格,则输出并更新状态…而不是为您提供完整的工作程序,我更愿意引导您走向正确的方向 首先,c+1并不意味着输入中的下一个字符。它只向c的值添加1,这将有效地将c转换为文本中的下一个字符。 例如,如果c是“a”,c+1表示“b”,这是整型中的下一个字符,如果c是“表中代码为32的单个空格”,c+1表示“!”表中有代码33 好吧,为了得到下一个角色,你需要阅读它!以同样的方式阅读第一个字符。实现这一点的最佳方法是始终保持前一个读取字符,并用当前读取的字符检查该字符 因此,您需要两个变量,例如c和pc。您读取字符并将其存储在c中。首先,pc是“\0”。如果读取的字符不是空格或制表符,则将其写入输出。如果是tab,则将其更改为空格。如果是空格,则检查前一个字符pc。如果不是空格,则打印c。在循环结束时,您应该将c的值存储到pc中,这意味着您正在pc中保留前一个字符
我想我告诉过你完整的解决方案了 与其给你完整的工作计划,我更愿意引导你走向正确的方向 首先,c+1并不意味着输入中的下一个字符。它只向c的值添加1,这将有效地将c转换为文本中的下一个字符。 例如,如果c是“a”,c+1表示“b”,这是整型中的下一个字符,如果c是“表中代码为32的单个空格”,c+1表示“!”表中有代码33 好吧,为了得到下一个角色,你需要阅读它!以同样的方式阅读第一个字符。实现这一点的最佳方法是始终保持前一个读取字符,并用当前读取的字符检查该字符 因此,您需要两个变量,例如c和pc。您读取字符并将其存储在c中。首先,pc是“\0”。如果读取的字符不是空格或制表符,则将其写入输出。如果是tab,则将其更改为空格。如果是空格,则检查前一个字符pc。如果不是空格,则打印c。在循环结束时,您应该将c的值存储到pc中,这意味着您正在pc中保留前一个字符
我想我告诉过你完整的解决方案了 看看你的第一个大括号“if”有点奇怪。这段代码没有编译:12:error:“else”没有前面的“if”c+1?你想用这句话暗示什么?很抱歉。那个额外的{错误地出现在那里,它不在真正的答案中。除此之外,还有任何错误。对那个额外的感到抱歉{我想知道有多少人知道k&r是什么。我当然不知道。看看你的第一个“如果”大括号有点奇怪。这段代码没有编译:12:error:“else”没有前面的“如果”c+1?你想用它暗示什么?很抱歉,那是额外的{错误地到了那里,它不在真正的答案中。除此之外,还有任何错误。对于那个额外的错误,我很抱歉{我想知道有多少人知道k&r是什么。我当然不知道。如何检查下一个字符的值?你是如何得到当前字符的?当前字符?通过while循环。while循环一直到下一个字符,直到它到达文件的结尾。Hilfe zur selbthilfe。你通过回答我的问题回答了你的问题。我想检查空格的结尾,这就是我使用c+1的原因。假设输入是friend/////u,然后到达第三个/u。我知道我的空格将结束,知道这一点,我可以用一个空格替换3个空格
通过将ithat的值3存储到n中。因此n不等于0,它应该打印单个空格,下一个字符不是空格,因此我变为0,然后打印。但不知何故,代码没有按预期运行。即使我在第一个块中输入n=0,如果它不起作用。如何检查下一个字符值?如何获得当前值字符?当前字符?通过while循环。while循环继续到下一个字符,直到它到达文件.Hilfe zur selbthilfe的末尾。您通过回答我的问题来回答您的问题。我想检查空格的结尾,这就是我使用c+1的原因。假设输入是friend/\u/\ u/\ u,则到达第三个/\uu,我知道我的空格将结束,知道了这一点,我可以通过将ithat的值3存储到n中,将3个空格替换为一个空格。因此n不等于0,它应该打印单个空格,下一个字符不是空格,因此我变为0,然后打印。但不知怎的,代码没有按预期运行。即使我在第一个块中放入n=0,如果它不起作用,我也算出了它也可以用一个变量来完成,但还是非常感谢您。@THEPARADOX在定义变量时从不节约。我一定会记住这一点。包括main{inti;fori=0,i>=0;i++printfTHANK YOU;}@THEPARADOX your's welcome。顺便说一句,如果你感到满意,你通常应该将其中一个答案标记为接受答案。请阅读以了解更多信息。我发现它也可以使用单个变量来完成,但仍然非常感谢您。@THEPARADOX在定义变量时从不节约。我一定会记住这一点。包括main{inti;fori=0,i>=0;i++printfTHANK YOU;}@THEPARADOX your's welcome。顺便说一句,如果你感到满意,你通常应该将其中一个答案标记为接受答案。请阅读更多信息。