我想用ASCII码更新我的C码
我有一个C代码,当我给它一个相反的句子时,它会把我的句子转换成通常的句子,但我的问题是当我使用像?或等等,我们的程序不起作用 输入示例:oD uoy tnaw ot eunitnoc 输出(我们想要):是否要继续我想用ASCII码更新我的C码,c,C,我有一个C代码,当我给它一个相反的句子时,它会把我的句子转换成通常的句子,但我的问题是当我使用像?或等等,我们的程序不起作用 输入示例:oD uoy tnaw ot eunitnoc 输出(我们想要):是否要继续 #include <stdio.h> #include <ctype.h> int main() { char sentence[100]; int ch, i, j, k; for (i=0; i<sizeof(sentenc
#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;
}
输出显示:是否要?是否继续
你能帮我解决这个问题吗?我想我必须使用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;
}
#包括
#包括
int main()
{
char语句[100];
int ch,i,j,k;
对于(i=0;i问题是,您考虑用空格或NUL分隔的标记(一个单词)。但是标点符号不是单词的一部分。我认为实现您想要的简单方法是替换< /P>。
if(sentence[j]==' ' || sentence[j]=='\0')
借
该函数是在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;
}
#包括
#包括
int main()
{
char语句[100];
int ch,i,j,k;
对于(i=0;i您可以尝试以下代码
输入示例:oD uoy 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;
}
#包括
#包括
int main()
{
char语句[100];
int ch,i,j,k;
对于(i=0;i你想得不对。你不需要ascii码来解决这个问题。你需要找到单词的开始、停止位置,并以相反的顺序包含它们之间的所有字符。就是这样。一个简单的基于数组的堆栈,顺便说一句,会使这个问题变得很简单,并且不需要在单个缓冲区中猛击整行。我还认为这对t来说非常方便他的问题。你的问题与ASCII或其他编码无关。你应该做的是在调试器中启动程序,逐行执行,同时注意所有变量,尤其是j
,k
,句子[j]
和句子[k]
。还有一个小提示:eunitnoc的反面是什么?
?它不是继续?
。请不要使用“幻数”,因为这些将不适用于其他编码。此外,其他编码中的范围也可能不同。有,这将适用于任何编码,并且将更具描述性。我将其替换为if(!isalpha(句子[j]))但是它没有改变。对不起,我不擅长数组编程。你能给我最后的代码吗?谢谢兄弟。