字符串数组排序

最噩梦的一集

蒜头君给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(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;

}

结束辣😭😭😭😭😭😭😭😭😭

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务