地球原著民 2021-11-20 10:25 采纳率: 100%
浏览 25
已结题

将字符串里的数字和字母分别输出再排序

img

  • 写回答

1条回答 默认 最新

  • 关注

    代码如下:

    #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;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月20日

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应