题目描述
给定n个字符串,请对n个字符串按照字典序排列。
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。
示例1
输入
9
cap
to
cat
card
two
too
up
boat
boot
输出
boat
boot
cap
card
cat
to
too
two
up
题解思路
- 使用 C++ sort 函数实现对字符串的排序。
sort 函数定义如下:
Sorts the elements in the range [first,last) into ascending order.// std::sort define in <algorithm> // default (1) template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last); // custom (2) template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
- 使用C strcmp函数冒泡排序
- 使用C语言 qsort函数实现
代码实现
C++ 实现
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a, string b)
{
return a < b;
}
int main()
{
int n;
cin >> n;
vector<string> strs;
string str;
for(int i = 0; i < n; ++i) {
cin >> str;
strs.push_back(str);
}
sort(strs.begin(), strs.end(), cmp);
for(int i = 0; i < n; ++i) {
cout << strs[i] << endl;
}
return 0;
}
C语言实现
int main()
{
int n;
scanf("%d", &n);
char strs[1001][101];
for(int i = 0; i < n; ++i) {
scanf("%s", strs[i]);
}
char temp[101];
// 使用冒泡排序
for(int j = 0; j < n - 1; ++j) {
for(int k = 0; k < n - 1 - j; ++k) {
if(strcmp(strs[k], strs[k + 1]) > 0) {
strcpy(temp, strs[k]);
strcpy(strs[k], strs[k + 1]);
strcpy(strs[k + 1], temp);
}
}
}
for(int i = 0; i < n; ++i) {
printf("%s\n", strs[i]);
}
return 0;
}
C语言qsort函数实现
int cmp(const void *a, const void *b)
{
return strcmp((char *)a, (char *)b);
}
int main()
{
int n;
scanf("%d", &n);
char strs[1001][101];
for(int i = 0; i < n; ++i) {
scanf("%s", strs[i]);
}
qsort(strs, n, sizeof(strs[0]), cmp);
for(int i = 0; i < n; ++i) {
printf("%s\n", strs[i]);
}
return 0;
}