2016-08-02 87 views
1

我试着用C数组写下面的代码。
当我进入=>I am a boy.
所需的输出是=>boy a am I.
这里是我下面的代码,它不工作。
我发现的bug 2天,我仍然无法找到问题C关于单词反转

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]); 
} 
+0

在'if(str [k] ==“”)',问题是''“'是一个字符串,而不是一个字符。试试'if(str [k] =='')'而不是。 – user3386109

+1

“它不起作用”。那它有什么作用?您是否尝试过使用调试器来帮助您找到问题?但对于初学者来说,如果(str [k] ==“”)'错误,因为'str [k]'是一个'char',但'“”'是一个字符串。 – kaylum

+0

对不起,我不得不改变我的话 – Hardy

回答

1

正如其他人所指出的还有你的代码多个问题。

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

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

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


/* 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()或别的东西。