// 对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;
}
不能将源代码发出来么,还要一行一行敲啊
void charSort(char *charList, int charAmount)
{
int i,j;
char c;
for(i=0;i<charAmount-1;i++)
for(j=0;j<charAmount-1-i;j++)
{
if(charList[j] > charList[j+1])
{
c = charList[j];
charList[j] = charList[j+1];
charList[j+1] = c;
}
}
}
// 对int数组进行排序
void numberSort(int *numberList, int numberAmount)
{
int i,j,t;
for(i=0;i<numberAmount-1;i++)
for(j=0;j<numberAmount-1-i;j++)
{
if(numberList[j] < numberList[j+1])
{
t = numberList[j];
numberList[j] = numberList[j+1];
numberList[j+1] = t;
}
}
}
// 根据记录的位置将对应的字母装入数组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] + '0';
}
}
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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!