字符串数组排序
最噩梦的一集
蒜头君给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(inc)、自然逆序(dec)、忽略大小写顺序(ncinc)、忽略大小写逆序(ncdec)等。
输入格式
输入有多行,第一行为一个表明排序方式的字符串,第二行为字符串的数目。
其余各行每行一个字符串,字符串仅含字母且中间没有空格。
字符串的个数和长度都不超过 103103。
保证每个字符串在忽略大小写的情况下都不同。
输出格式
输出也有多行,按指定的顺序输出输入的字符串。
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
- #include <iostream>:
- #include <vector>动态数组
- #include <algorithm>:排序
- #include <string>:用于字符串操作
- using namespace std;:使用标准命名空间 省事
- 定义一个布尔函数号进行比较
- 返回类型: bool该函数返回一个布尔值,表示字符串 a 是否小于字符串 b。
- 参数:const string &a:一个常量字符串引用 a,表示第一个字符串。const string &b:一个常量字符串引用 b,表示第二个字符串。
bool compareInc(const string &a, const string &b) {
return a < b;
}比较两个字符串 a 和 b,如果 a 小于 b,返回 true
,否则返回 false
。用于升序排序
bool compareDec(const string &a, const string &b) {
return a > b;
} 反之 反之
bool compareNcInc(const string &a, const string &b) {
定义大写
string lowerA = a;
string lowerB = b;将大写转化为小写再去进行比较
transform(lowerA.begin(), lowerA.end(), lowerA.begin(), ::tolower);
transform(lowerB.begin(), lowerB.end(), lowerB.begin(), ::tolower);
return lowerA < lowerB;
}
bool compareNcDec(const string &a, const string &b) {
string lowerA = a;
string lowerB = b;
transform(lowerA.begin(), lowerA.end(), lowerA.begin(), ::tolower);
transform(lowerB.begin(), lowerB.end(), lowerB.begin(), ::tolower);
return lowerA > lowerB;
}同里
开始读取 进行循环输入 定义排序使用的函数 进行比较
int main() {
string sortType;
int n;
cin >> sortType >> n;
vector<string> strings(n);
for (int i = 0; i < n; ++i) {
cin >> strings[i];
}
接下来是各种排序要进行的操作
if (sortType == "inc") {
sort(strings.begin(), strings.end(), compareInc);
} else if (sortType == "dec") {
sort(strings.begin(), strings.end(), compareDec);
} else if (sortType == "ncinc") {
sort(strings.begin(), strings.end(), compareNcInc);
} else if (sortType == "ncdec") {
sort(strings.begin(), strings.end(), compareNcDec);
}
for (const auto &str : strings) {
cout << str << endl;
}
return 0;
}
结束辣😭😭😭😭😭😭😭😭😭