2016-08-02 61 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()或別的東西。