c++写一个字符串排序,字母按个排序,数字按连续的整体排序,例如对AB100,AB10,B100排序,则结果为AB10,AB100,B100,忽略字母大小写
时间: 2023-09-15 12:20:42 浏览: 65
以下是一个使用C++的字符串排序程序,它可以将字母按个排序,数字按连续的整体排序,同时忽略字母大小写:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(const string& s1, const string& s2) {
int i = 0, j = 0;
while (i < s1.length() && j < s2.length()) {
if (isdigit(s1[i]) && isdigit(s2[j])) {
int num1 = 0, num2 = 0;
while (i < s1.length() && isdigit(s1[i])) {
num1 = num1 * 10 + s1[i] - '0';
i++;
}
while (j < s2.length() && isdigit(s2[j])) {
num2 = num2 * 10 + s2[j] - '0';
j++;
}
if (num1 != num2) {
return num1 < num2;
}
} else {
if (tolower(s1[i]) != tolower(s2[j])) {
return tolower(s1[i]) < tolower(s2[j]);
}
i++;
j++;
}
}
return s1.length() < s2.length();
}
int main() {
int n;
cin >> n;
string s;
vector<string> strs;
for (int i = 0; i < n; i++) {
cin >> s;
strs.push_back(s);
}
sort(strs.begin(), strs.end(), cmp);
for (int i = 0; i < n; i++) {
cout << strs[i] << endl;
}
return 0;
}
```
该程序采用自定义的比较函数`bool cmp(const string& s1, const string& s2)`来进行排序,首先比较两个字符串的第一个字符,如果都是数字,则按照数字大小比较,如果都是字母,则按照字母大小写不敏感比较,如果一个是数字一个是字母,则数字优先,最后按照字符串长度排序。使用`std::sort`函数对字符串进行排序。
阅读全文