这里有你想要做什么的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?
尝试'strings'的阵列来存储名字的价值。然后最后(循环外)调用一个排序例程。 –
这里可以使用qsort吗? – Supremo
请参阅我在获取数据时不会进行排序,因为如果您尝试这样做,复杂度将为'O(n^2)'。而是获取所有必需的字符串,然后调用自定义的qsort。请注意,您可能必须编写并将比较器函数重载,以便比较字符串以包含不等长度的情况。我希望你明白这一点。 –