2013-10-23 45 views
1
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    int n; 

    cout << "Enter n: "; 
    cin >> n; 
    cout << "Enter " << n << "names"; 

    for(int i=0; i<n; i++) 
    { 





    system("pause>0"); 
    return 0; 
} 

這是我未完成的代碼。我需要輸入一個數字,然後它會要求我輸入n個名字。並輸入名稱後,程序應按字母順序排列名稱。我將如何在循環中做到這一點?我在循環部分非常困惑。是的,我知道當我完成循環時我會編碼。我只是困惑,並在這部分有問題。提前致謝!循環和strcpy

+0

嘗試'strings'的陣列來存儲名字的價值。然後最後(循環外)調用一個排序例程。 –

+0

這裏可以使用qsort嗎? – Supremo

+0

請參閱我在獲取數據時不會進行排序,因爲如果您嘗試這樣做,複雜度將爲'O(n^2)'。而是獲取所有必需的字符串,然後調用自定義的qsort。請注意,您可能必須編寫並將比較器函數重載,以便比較字符串以包含不等長度的情況。我希望你明白這一點。 –

回答

1

這裏有你想要做什麼的STL版本:

#include <iostream> 
#include <vector> 
#include <cstdlib> 
#include <string> 
#include <algorithm> 

int main() { 
    std::vector<std::string> names; 

    int num = 0; 
    std::cout << "Please enter a number: "; 
    std::cin >> num; 
    std::cout << "\n"; 

    std::string name; 

    for (int i = 0; i < num; ++i) { 
     std::cout << "Please enter name(" << (i+1) << "): "; 
     std::cin >> name; 
     names.push_back(name); 
    } 

    //sort the vector: 
    std::sort(names.begin(), names.end()); 

    std::cout << "The sorted names are: \n"; 

    for (int i=0; i<num; ++i) { 
     std::cout << names[i] << "\n"; 
    } 

    return 0; 
} 

但是,此版本是區分大小寫的排序,所以無論是否執行你的要求可能會有問題。所以,一個可能的下一步更貼近不區分大小寫的排序是使用這段代碼矢量進行排序前:

//transform the vector of strings into lowercase for case-insensitive comparison 
    for (std::vector<std::string>::iterator it=names.begin(); it != names.end(); ++it) { 
     name = *it; 
     std::transform(name.begin(), name.end(), name.begin(), ::tolower); 
     *it = name; 
    } 

用這種方法唯一需要注意的是,所有的字符串將被轉換成小寫,但是。

參考:

https://stackoverflow.com/a/688068/866930

How to convert std::string to lower case?

+1

非常感謝您爲OP做作業:) – greatwolf

+0

@greatwolf:我的初衷並不是完成整個事情,但我對這個問題非常專注,最終完成了上述過程,在那之後我想我至少應該分享我的努力。所以,在某種程度上,我整體上做這件事是一件很幸福的事情。不過謝謝你的反饋。 :) – jrd1

+0

嘿,謝謝你回答我的問題! :D – Supremo