C关于单词反转

时间:2016-08-02 03:56:05

标签: c

我尝试使用C数组来编写下面的代码 当我输入=> I am a boy.时 期望的输出是=> boy a am I.
这是我的代码,它不起作用。
我发现了2天的错误,我仍然找不到问题

int i,j,k,m,start,temp_end,len;
char str[30];
gets(str);

len=strlen(str);
temp_end=len-1;

for(k=len;k>0;k--)
{
    if(str[k]==" ")
        start=k;
    for(j=start+1;j<temp_end;j++)
    {
        printf("%c",str[j]);
    }
    printf(" ");
    temp_end=k;
}
for(m=0;m<temp_end;m++)
{
    printf("%2c.",str[m]);
}

1 个答案:

答案 0 :(得分:1)

正如其他人指出的那样,您的代码存在多个问题。

  1. 在条件if(str[k]==" ")中,您使用" "来表示单个空格字符,这是不正确的。对于单个空格字符,您需要使用' '" "string,只有一个空格字符。

  2. 您每次都在运行for(j=start+1;j<temp_end;j++) { … }循环。但是,只有在找到新空间' '时才应运行此选项。你可以使用一个标志。与printf(" ");temp_end = k;

  3. 相同
  4. printf("%2c.", str[m])看起来像是一个错字。为什么%2c.?你应该只做"%c"

  5.     /* Use a flag to know when to print */
        /* 0 means don't print, 1 means print */
        int pflag = 0;
    
        for(k = len-1; k >0; k--)
        {
                if(str[k]==' ') {
                        pflag = 1; /* new space found, update the flag to print  */
                        start=k;
                }
                if (pflag == 1)   /* check flag to see if print needed */
                { 
                        for(j=start+1;j<temp_end;j++)
                        {
                                printf("%c",str[j]);
                        }
                        printf(" ");
                        temp_end=k;
                        pflag = 0;   /* reset flag after printing */
                }
        }
    
        for(m=0;m<temp_end;m++)
        {
                printf("%c",str[m]);
        }
    

    另外,请勿使用gets()。使用fgets()或其他内容。