tmp

#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;
    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=='.') break;
    }
    int lena=i;
    int lenb=j;


    ch_sort(a,lena);
    my_sort(b,lenb);
    int cnt_a,cnt_b;
    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");
    }


    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;


//printf("查询\n");
//printf("a=%s    b=%s   ",a,b);


    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);
    //printf("strcmp = %d\n",x);
    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、付费专栏及课程。

余额充值