我想用ASCII代码更新我的C代码

时间:2014-12-05 12:03:12

标签: c

我有一个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;
}

2 个答案:

答案 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;
}