字符串排序。请编写程序按照如下规则对多个字符串(每个字符串至少含有一个数字字符)进行降序排列:
1)按照字符串中字母字符个数和数字字符个数(简称字母数字比)的比值大小进行排序;
2)若两个字符串的字母数字比相同,则按照字符串本身大小进行排序。
例如:输入:[“abc123”,“abc+1234”,“ababab-1”]
返回:[“ababab-1”,“ABC123”,“abc+1234”]
#include
#include
using namespace std;
string sortArr(string stringArr[1000], int len) {
int n_num = 0;
int c_num = 0;
int n_Arr[1000] = { 0 };
int c_Arr[1000] = { 0 };
char ch;
for (int i = 0; i < len; i++) {
for (int j = 0; j < stringArr[i].length(); j++)
{
ch = stringArr[i].at(j);
if (ch <= 57)
{
n_Arr[i]++;
}
else {
c_Arr[i]++;
}
}
}
for (int i = 0; i < len; i++)
{
int max = 0;
int j;
for (j = i + 1; j < len; j++)
{
if (c_Arr[j] / n_Arr[j] > c_Arr[i] / n_Arr[i]) {
max = j;
}
else if (c_Arr[j] / n_Arr[j] == c_Arr[i] / n_Arr[i]) {
int sum1 = 0; int sum2 = 0;
for (int k = 0; k < stringArr[i].length(); k++)
{
sum1 += stringArr[i][k];
}
for (int z = 0; z < stringArr[j].length(); z++)
{
sum2 += stringArr[j][z];
}
if (sum2 > sum1) {
max = j;
}
}
}
if (max != j)
{
string temp = stringArr[max];
stringArr[max] = stringArr[j];
stringArr[j] = temp;
}
}
return stringArr[1000];
}
int main() {
int n;
cin >> n;
string stringArr[1000] = { "a" };
string s;
for (int i = 0; i < n; i++)
{
cout << "请输入第" << i + 1 << "个字符串" << endl;
cin >> s;
stringArr[i] = s;
}
string result=sortArr(stringArr, n);
for (int i = 0; i < n; i++)
{
cout << stringArr[i] << " ";
}
return 0;
}
请问大佬们这段代码哪里错了。。。。编译没问题,运行发生异常了。