就是图片上的问题,主要看加的函数,主函数没问题最后将改好成功运行的截图发过来
#include <stdio.h>
// 对char数组进行排序
void charSort(char *charList, int charAmount)
{ int a[charAmount];
char b[charAmount];
for(int i=0;i<charAmount;i++){
for(int m=0;m<charAmount;m++){
if(charList[i]>charList[m])a[i]++;
if(charList[i]==charList[m]&&i>m)a[i]++;
}
}
for(int i=0;i<charAmount;i++)
{b[a[i]]=charList[i];
}
for(int i=0;i<charAmount;i++){
charList[i]=b[i];
}
}
// 对int数组进行排序
void numberSort(int *numberList, int numberAmount)
{
int a[numberAmount];
char b[numberAmount];
for(int i=0;i<numberAmount;i++){
for(int m=0;m<numberAmount;m++){
if(numberList[i]>numberList[m])a[i]++;
if(numberList[i]==numberList[m]&&i>m)a[i]++;
}
}
for(int i=0;i<numberAmount;i++)
{b[a[i]]=numberList[i];
}
for(int i=0;i<numberAmount;i++){
numberList[i]=b[i];
}
}
// 根据记录的位置将对应的字母装入数组str
void loadChar(char *str, char *charList, int *charLoc, int charAmount)
{
for(int i=0;i<charAmount;i++){
str[charLoc[i]]=charList[i];
}
}
// 根据记录的位置将对应的数字装入数组str
void loadNumber(char *str, int *numberList, int *numberLoc, int numberAmount)
{
for(int i=0;i<numberAmount;i++){
str[numberLoc[i]]=numberList[i];
}
}
int main()
{
// 字符串长度,字符串中字母的数量,数字的数量
int amount, charAmount = 0, numberAmount = 0;
char str[1001];
// 记录str数组中字母的下标和数字的下标
int charLoc[1001], numberLoc[1001];
// char数组中字母组成的数组
char charList[1001];
// str数组中数字组成的数组
int numberList[1001];
scanf("%d %s", &amount, str);
// 遍历str数组
for (int i = 0; i < amount; i++)
{
char ch = str[i];
// 对每个位置的字符进行分类和统计
if (ch >= 'A' && ch <= 'Z')
{
// 记录所在下标
charLoc[charAmount] = i;
// 记录值
charList[charAmount++] = ch;
}
else if (ch >= '0' && ch <= '9')
{
//记录所在下标
numberLoc[numberAmount] = i;
// 记录值
numberList[numberAmount++] = ch - '0';
}
}
// 调用对应的函数
charSort(charList, charAmount);
numberSort(numberList, numberAmount);
loadChar(str, charList, charLoc, charAmount);
loadNumber(str, numberList, numberLoc, numberAmount);
printf("%s", str);
return 0;
}