我有一个C代码,当我给它一个反向句子时,它将我的句子转换成平常,但我的问题是当我使用书写标志时?要么 !等,我们的计划不正常。
示例输入:oo uo tnaw ot eunitnoc?
输出(我们想要):你想继续吗?
输出显示:你想要吗?继续
你可以帮我解决这个问题吗?我想我必须使用ASCII码来解决它,但我不知道如何定义它们并解决这个问题。这是我的代码:
#include <stdio.h>
#include <ctype.h>
int main()
{
char sentence[100];
int ch, i, j, k;
for (i=0; i<sizeof(sentence)-1; i++)
if ((sentence[i] = getchar()) == '\n')
break;
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 :(得分:2)
问题在于您考虑使用空格或nul分隔的标记(单词)。但标点符号不是这个词的一部分。我认为实现目标的简单方法是替换
if(sentence[j]==' ' || sentence[j]=='\0')
通过
if(!isalpha(sentence[j]))
isalpha函数在ctype.h中声明,如果字符是字母,则返回true。这样,您可以反转字母(单词)块,而不需要特殊字符。
编辑:您的代码似乎有更多问题。我修理了它们并对其进行了测试,现在它似乎正常工作。
#include <stdio.h>
#include <ctype.h>
int main()
{
char sentence[100];
int ch, i, j, k;
for (i=0; i<sizeof(sentence)-1; i++)
if ((sentence[i] = getchar()) == '\n')
break;
sentence[i] = '\0';
for (j = 0; j <=i; j++)
{
if(!isalpha(sentence[j]))
{
for(k=j-1; isalpha(sentence[k]) && k>=0; k--)
{
putchar(sentence[k]);
}
putchar(sentence[j]);
}
}
return 0;
}
答案 1 :(得分:0)
你可以试试这个代码......
示例输入:oo uo tnaw ot eunitnoc?
输出:你想继续吗?
#include <stdio.h>
#include <ctype.h>
int main()
{
char sentence[100];
int ch, i, j, k;
for (i=0; i<sizeof(sentence)-1; i++)
if ((sentence[i] = getchar()) == '\n')
break;
sentence[i] = '\0';
for (j = 0; j <i; j++)
{
if(islower(sentence[j])||isupper(sentence[j]))
continue;
for( k=j-1;sentence[k]!=' ' && k>=0;k--)
{
ch=sentence[k];
putchar(ch);
}
ch=sentence[j];
putchar(ch);
}
return 0;
}