1081 sort

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void my_sort(int a[],int n);
void ch_sort(char *a[],int n);


int is_alp(char x)
{
    return (x>='a'&&x<='z')||(x>='A'&&x<='Z');
}


int is_num(char x)
{
    return (x>='0')&&(x<='9');
}
int main()
{
    char c;


    int  b[1000];
    int state[1000];
    int flag = 5;
    int i,j,k,sum,signal=1;


    char **a=(char**)malloc(100*sizeof(char*));
    for (i=0;i<100;i++)
        a[i]=(char*)malloc(100*sizeof(char));


    i=j=0;
    k=1;
    sum =1;
    int m=0;
    int cnt_a,cnt_b;
    char last='\0';
    while ((c=getchar())!=EOF)
    {
        if (c==' ') continue;


        if (flag==1)//数字
        {
            if ((c!=',')&&(c!='.')) sum=sum*10+c-'0';
            else
            {
                b[j++]=sum*signal;
                flag=5;
                state[m++]=1;


            }
        }
        else if (flag==0)//字母
        {
            if ((c!=',')&&(c!='.')) a[i][k++]=c;
            else
            {
                a[i++][k]='\0';
                flag=5;
                k=1;
                state[m++]=0;
            }
        }
        else
        {
            if (c=='-')
            {
                flag=1;
                signal=-1;
                sum = 0;
            }
            if (is_alp(c))
            {
                flag=0;
                a[i][0]=c;
            }
            if (is_num(c))
            {
                flag=1;
                signal=1;
                sum=c-'0';
            }
        }


        if ((c=='.')&&(last=='\n')) break;
        last=c;
        int lena=i;
        int lenb=j;
        if (c=='\n')
        {
            ch_sort(a,lena);
            my_sort(b,lenb);


            cnt_a=cnt_b=0;
            for (i=0;i<m;i++)
            {
                if (!state[i])  printf("%s",a[cnt_a++]);
                else printf("%d",b[cnt_b++]);
                if (i<m-1)printf(", ");
                else printf(".\n");
            }
            i=j=0;
            k=1;
            sum =1;
            flag=5;
            m=0;
            signal=1;
        }
    }
    return 0;
}




void my_sort(int a[],int n)
{
    int tmp,i,j;
    for (i=1;i<n;i++)
    {
        tmp = a[i];
        for (j=i;(j>0)&&(a[j-1]>tmp);j--)
            a[j]=a[j-1];
        a[j]=tmp;
    }
}


int my_strcmp(char a[],char b[])
{
    int len1=strlen(a);
    int len2=strlen(b);
    int i;


    char*p=(char*)malloc((len1+1)*sizeof(char));
    for (i=0;i<len1;i++)
    {
        if ((a[i]>='a')&&(a[i]<='z')) p[i]=a[i];
        else p[i]=a[i]-'A'+'a';
    }
    p[i]='\0';
    char*q=(char*)malloc((len2+1)*sizeof(char));
    for (i=0;i<len2;i++)
    {
        if ((b[i]>='a')&&(b[i]<='z')) q[i]=b[i];
        else q[i]=b[i]-'A'+'a';
    }
    q[i]='\0';
    int x=strcmp(p,q);
    free(p);
    free(q);
    return x;
}




void ch_sort(char *a[],int n)
{
    int i,j;
    char *tmp;
    for (i=1;i<n;i++)
    {
        tmp = a[i];


        for (j=i;(j>0)&&(my_strcmp(a[j-1],tmp)>0);j--)
            a[j]=a[j-1];


        a[j]=tmp;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值