2011-09-20 41 views
1

我試圖通過我拿起的書教自己C++。其中一個練習是獲取用戶輸入的顏色數組作爲字符串對象。然後他們說要使用關係運算符對用戶輸入的顏色實施選擇排序。我已經開始了我認爲正確的道路,但是我遇到了障礙,我不確定它有什麼問題。它編譯,它只是不會有什麼,我已經將返回排序瓦萊斯(我認爲)任何幫助非常感謝用於數組的C++選擇

void selectionSort(char [], int); 
int main() 
{ 
    const int SIZE = 80; 
    char colour[SIZE]; 

    cout << "Enter the names of five kinds of fruit:" << endl; 
    cin.getline(colour, SIZE); 

    cout << colour << endl; 
    selectionSort(colour, SIZE); 

    cout << colour << endl; 
    return 0; 
} 
// SORT 
void selectionSort(char shade[], int size) 
{ 
    int startScan, minIndex, minValue; 


    for (startScan = 0; startScan < (size - 1); startScan++) 
    { 
     minIndex = startScan; 
     minValue = shade[startScan]; 
     for (int index = startScan + 1; index < size; index++) 
     {  
      if (shade[index] < minValue) 
      { 
       minValue = shade[index]; 
       minIndex = index; 
      } 
     } 
     shade[minIndex] = shade[startScan]; 
     shade[startScan] = minValue; 
    } 
    cout << shade[size] << endl; 
} 
+2

第一個問題是你的數組需要包含std :: strings,而不是字符。解決這個問題之後還有很多需要討論的內容。 –

+0

@MarkRansom - 所以不是'字符顏色[SIZE]'應該是'字符串顏色[SIZE]'? THanks – hart929

+0

你還需要循環你的輸入5次 - 現在它只能得到輸入,直到按下回車鍵。 –

回答

0

你選擇排序似乎罰款,但如果你把它叫做一個問題。

selectionSort(colour, SIZE); 

在這裏,你告訴你的算法,從顏色的大小字符排序,因爲尺寸是80,它會在80個前幾個字符排序,但你問用戶只需鍵入五個字符(在這裏我假設用戶應該輸入5個第一個字母的顏色,如果你希望用戶輸入顏色名稱,你應該閱讀5個字符串,而不是5個字符)。

如果用戶輸入有5個字符,color [5]將會有nil-terminator,它是0,並且在排序後會變爲color [0],這將導致一個空字符串。

嘗試排序只有你想要的字母:

selectionSort(colour, strlen(colour)); 
+0

我相信他們想要的是實際的詞語,即綠色的紅色等。如果是這樣的話,你的建議是否仍然有效? – hart929

+0

@jooMLA您的選擇排序是從顏色中排序字符,如果用戶鍵入「綠色紅色」,它將混合所有內容,結果將是「deeegnrr」。如果要對字符串進行排序,您有兩種選擇:在讀取行之後滑動單詞,或者在一行中讀取每個單詞並對行進行排序,而不是字符。 – fbafelipe

0

我要訂閱一項議案,禁止所有教C++與iostreamchar[]書。 它們是不連貫的。

如果std :: string保留一個「複雜類型」什麼是地獄cout是什麼? 如果cout保留「基本對象開始」,那麼std::string應該。