我的朋友和我写了一个C代码,我们给它一个反向句子,它为我们打印一个常规句子。我们必须将此代码上传到服务器,并使用一些测试用例检查我们的代码并给我们分数。但在某些测试用例中,它表示我们的代码存在运行时错误,我们必须缩短代码。另一个问题是当我们使用?
或!
之类的书写标记时,我们的程序不能正常工作。
示例输入:oD uoy tnaw ot eunitnoc?
输出(我们想要):Do you want to continue?
输出显示:Do you want to ?continue
您能否帮助我们缩短此代码并解决此问题?
谢谢。
我们的代码是:
#include <stdio.h>
#include <ctype.h>
int main()
{
char sentence[100];
int ch, i, j, k;
for (i = 0; (sentence[i] = getchar()) != '\n'; i++)
{
;
}
sentence[i] = '\0';
for (j = 0; j <=i; j++)
{
if (sentence[j] == ' ' || sentence[j] == '\0')
{
for (k = j-1; sentence[k] != ' ' && k >= 0; k--)
{
ch=sentence[k];
putchar(ch);
}
printf(" ");
}
}
return 0;
}
答案 0 :(得分:1)
代码正在处理&#34; eunitnoc?&#34;所有这些都是一个字,因此打印出来&#34;?继续&#34;。你可以通过不一直到最后一个字符来缩短循环,这不应该包含在最后一个字中。
至于缩短代码的长度:为什么不删除更改最终代码的行?&#39; \ n&#39;到&#39; \ 0&#39; (并相应地改变逻辑)。这将缩短代码。你关心减少行数吗?你可以删除一些空格。
例如,像这样,应该做你想做的事情:
#include <stdio.h>
#include <ctype.h>
int main()
{
char sentence[100];
int ch, i, j, k;
for (i=0; (sentence[i]=getchar())!='\n';i++){;}
for (j=0;j<=i;j++)
{
if (j==i)
{
putchar(sentence[j-1]);
}
else if (sentence[j]==' ' || j==i-1)
{
for (k=j-1;sentence[k]!=' ' && k>=0;k--)
{
ch=sentence[k];
putchar(ch);
}
if(j!=i-1)printf(" ");
}
}
return 0;
}