美文网首页
字符串排序问题

字符串排序问题

作者: hdchieh | 来源:发表于2019-03-19 13:01 被阅读0次
#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

相关文章

  • js数组方法总结

    数组的排序 sort()方法排序问题。 sort()方法是Array原型链上自带的方法。 默认排序顺序是根据字符串...

  • js算法

    排序算法 冒泡排序 快速排序 字符串操作 判断回文字符串 翻转字符串 反向遍历字符串 function reve...

  • JS排序

    1、数字排序 2、字符串排序 3、中文排序 4、中英文数字字符串排序

  • 字符串排序问题

    ———————————————————————————————— ————————————————————————...

  • 一刷到底。。

    归并快排堆排序模拟堆01背包完全背包问题多重背包问题多重背包问题2链表排序多链表合并字符串哈希字典树单调栈单调队列...

  • 《算法》笔记 13 - 字符串排序

    键索引计数法频率统计将频率转换为索引数据分类回写 低位优先的字符串排序 高位优先的字符串排序 许多重要而熟悉的问题...

  • nodejs实现字符串排序(高位优先&低位优先)

    字符串排序 网上很多都是c实现的,这里我写一个nodejs实现的 低位优先字符串排序 高位优先字符串排序

  • 常见算法的js实现

    排序算法 1、冒泡排序 2、快速排序 3、二路归并 字符串操作 1、判断回文字符串 2、翻转字符串 思路一:反向遍...

  • 常见算法的 js 实现

    排序算法 1、冒泡排序 2、快速排序 3、二路归并 字符串操作 1、判断回文字符串 2、翻转字符串 思路一:反向遍...

  • js相关算法

    一、排序算法 1、冒泡排序 2、快速排序 3、二路归并 二、字符串操作 1、判断回文字符串 2、翻转字符串 思路一...

网友评论

      本文标题:字符串排序问题

      本文链接:https://www.haomeiwen.com/subject/xxxlpqtx.html