2013-10-23 44 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