C++字符串排序。

字符串排序。请编写程序按照如下规则对多个字符串(每个字符串至少含有一个数字字符)进行降序排列:

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;

}

请问大佬们这段代码哪里错了。。。。编译没问题,运行发生异常了。

    原文作者:weixin_50011831
    原文地址: https://blog.csdn.net/weixin_50011831/article/details/117566969
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞