2015-05-16 133 views
-1

我試圖安排這個只包含數字的字符數組,它打印與我輸入它沒有任何變化的順序相同的數組,我試着在if語句中使用類型轉換,它給了我正確的運行結果,但沒有被在線裁判接受。這裏的錯誤是什麼,爲什麼我的第二個解決方案不被接受?比較字符數組元素

#include <stdio.h> 
#include <string.h> 
int main() { 
    char x[101]; 
    scanf("%s",x); 
    int l,i,j ; 

    l = strlen(x); 

    char temp ; 

    for(i=0;x[i];i++) 
    { 
     for(j=i ; x[j] ; j++){ 

      if('x[j]'<'x[i]') //(int)x[j] and (int)x[i] didn't work on the 
           //online judge 
      { 
       temp=x[i]; 
       x[i]=x[j]; 
       x[j]=temp; 

      } 
     } 
    } 

    printf("%s",x); 
    return 0 ; 
} 
+0

這是什麼''x [j]''?這是一個多字符常量,很可能沒有做你想做的事情。另外,'l = strlen(x);'和你放下'l',刪除它。 –

+0

我認爲它會將字符更改爲一個整數,表示該字符的ascii,如她所說的http://www.cs.swarthmore.edu/~newhall/unixhelp/C_chars.html,以便我可以比較它們。可以詳細說明一下嗎? –

+0

@OmarKhaled盡你所能,但它沒有任何意義。由於這些是常量字符串,在這種情況下,它幾乎等同於'if(false)'。 – szczurcio

回答

1

我不知道爲什麼周圍有數組元素的報價,但不是做你的想法,比較正在發生的事情,因爲一個多字符字符串進行評估,以一個整數值,這是實現定義的,因此, if語句總是比較相同的值,這意味着它總是會產生相同的結果,你需要刪除引號

if (x[j] < x[i]) 

另外,我建議你指定數組的長度scanf()和檢查它是否成功讀取價值,如thi ŝ

if (scanf("%100s", x) != 1) 
    return -1; /* Perhaps EOF, i.e. you pressed Ctrl+D or (Ctrl+Z MS Windows) */ 

如果你不檢查你的程序將調用未定義的行爲,如果這裏不傷害你的簡單程序的任何重要組成部分,如果你不學會做它,那麼你將在編寫一個更大的程序時,將來會有很多難以調試的錯誤。

+0

這段代碼是針對在線裁判問題的,所以雖然這樣的檢查是一種很好的做法,但在這種情況下,由於沒有人會給出該代碼無效的輸入,所以這會浪費時間。 – szczurcio

+0

感謝它正常工作 –

+2

@OmarKhaled你可以通過點擊複選標記接受答案,我希望你能理解我的解釋,否則請隨時要求澄清。 –

0

if語句中的報價計算爲多字符常量,它在我的編譯器(VC++ 2013年)正好是785B6A5D785B695D分別,這是這些字符粘在一起的ASCII碼。因此if從不執行。另外,你的意思是「沒有工作」?你有編譯錯誤嗎?如果是的話,它說了什麼?否則,由於冒泡排序非常緩慢,您可能已經超出了時間限制。

+0

不,我從測試編號1得到的錯誤答案法官的編譯器從我的代碼中返回的輸出與樣本測試用例中的編譯器不同,即使在我對您進行了更正之後 –