字符串排序问题

2019-03-19  本文已影响0人  hdchieh
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct Node
{
    char key;
    int num;
}Node,*NodePtr;
int cmp(const void*a,const void*b)
{
    NodePtr pa = (NodePtr)a;
    NodePtr pb = (NodePtr)b;
    char ca = toupper(pa->key);
    char cb = toupper(pb->key);
    if(ca==cb)//如果两个元素相等就比较他们的下标即先后次序
    {
        return pa->num - pb->num;
    }
    else
    {
        return ca - cb;
    }
}
int main(int argc, char const *argv[])
{
    char str[1000];//,buf[1000];
    while(fgets(str,999,stdin)!=NULL)
    {
        int i,j;
        Node arr[strlen(str)];
        for(i=0,j=0;i<strlen(str);i++)
        {
            if(isalpha(str[i]))
            {
                arr[j].num = j;
                arr[j++].key = str[i];
            }
        }
        qsort(arr,j,sizeof(Node),cmp);
        for(i=0,j=0;i<strlen(str);i++)
        {
            if(isalpha(str[i]))
            {
                str[i] = arr[j++].key;
                //str[i] = buf[j++];
            }
        }
        printf("%s",str );
    }
    return 0;
}

————————————————————————————————

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
    char a[1000];
    char b[1000];
    int count[26];
    int index;char temp;
    while(gets(a)){
        memset(count,0,sizeof(int)*26);
        for(int i=0;a[i]!='\0';i++){
            if(isalpha(a[i])){
                temp=tolower(a[i]);
                index=temp-'a';
                b[count[index]*26+index]=a[i];
                count[index]++;
            }
        }
        int j=0;
        for(int i=0;i<26;i++){
            for(int k=0;k<count[i];k++){
                if(isalpha(a[j]))
                    printf("%c",b[i+k*26]);
                else{
                    printf("%c",a[j]);
                    k--;
                }
                j++;
            }
        }
        while(a[j]!='\0')
            printf("%c",a[j]);
        printf("\n");
    }
}

————————————————————————————————

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
    char a[500];
    char b[500];
    int count[26];
    int index;char temp;
    while(gets(a)){
        memset(count,0,sizeof(int)*26);
        for(int i=0;a[i]!='\0';i++){
            if(isalpha(a[i])){
                temp=tolower(a[i]);
                index=temp-'a';
                b[count[index]*26+index]=a[i];
                count[index]++;
            }
        }
        int j=0;
        for(int i=0;i<26;i++){
            for(int k=0;k<count[i];k++){
                if(isalpha(a[j]))
                    a[j]=b[i+k*26];
                else 
                    k--;
                j++;
            }
        }
        printf("%s\n",a);
    }
}

中间那种内存超了,下面是优化的。

https://www.nowcoder.com/practice/d9aa3894d3aa4887843a85d26daa4437?tpId=61&&tqId=29548&rp=1&ru=/activity/oj&qru=/ta/pku-kaoyan/question-ranking

上一篇 下一篇

猜你喜欢

热点阅读