代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fenlei(char all[][100],int n,char zm[][100],char nmb[][100],int *nzm,int *nsz)
{
int i;
int k=0,m=0; //记录数字和字母数组的个数
int o=0,p=0,q=0;
for (i=0;i<n;i++)
{
o=0;p=0;q=0;
while(all[i][o])
{
if(all[i][o] >='0' && all[i][o]<='9')
nmb[k][p++] = all[i][o];
else if(all[i][o] >='0' && all[i][o]<='9')
zm[m][q++] = all[i][o];
o++;
}
nmb[k][p] = 0;
zm[m][q] = 0;
k++;
m++;
}
*nzm = m;
*nsz = k;
}
//选择排序,升序
void select_sort(int a[],int n)
{
int i,j;
int minindex,tmp;
for (i=0;i<n-1;i++)
{
minindex = i;
//找出第i小的数所在的位置
for(j=i+1;j<n;j++)
{
if(a[j] < a[minindex])
minindex = j;
}
//将第i小的数放在第i个位置
if (i != minindex)
{
tmp = a[i];
a[i] = a[minindex];
a[minindex] = tmp;
}
}
}
//冒泡排序
void bubble_sort(char a[][100],int n)
{
int i,j;
char t[100];
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(strcmp(a[j], a[j+1]) > 0) //从小到大,升序
{
memset(t,0,100);
memcpy(t,a[j],strlen(a[j]));
memset(a[j],0,100);
memcpy(a[j],a[j+1],strlen(a[j+1]));
memset(a[j+1],0,100);
memcpy(a[j+1],t,strlen(t));
}
}
}
}
int main()
{
int i,n;
int nmbsz = 0,nmbzm = 0; //数字和字母的组数
char all[30][100],nmb[30][100],zm[30][100];
int sz[30]; //保存转换后的数字
printf("请输入字符串的个数:");
scanf("%d",&n);
printf("请输入%d个字符串:\n",n);
for(i=0;i<n;i++)
scanf("%s",all[i]); //读取一行字符串
//分类
fenlei(all,n,zm,nmb,&nmbzm,&nmbsz);
//将数字字符转成数字
for(i=0;i<nmbsz;i++)
sz[i] = atoi(nmb[i]);
//数字排序
select_sort(sz,nmbsz);
//将字母字符串排序
bubble_sort(zm,nmbzm);
//显示
printf("排序后的字母:\n");
for (i=0;i<nmbzm;i++)
{
printf("%s\n",zm[i]);
}
printf("排序后的数字:\n");
for (i=0;i<nmbsz;i++)
{
printf("%d ",sz[i]);
}
return 0;
}