【问题标题】:How to find and print duplicate characters on string?如何在字符串上查找和打印重复字符?
【发布时间】:2015-10-21 03:57:33
【问题描述】:

我想知道如何在字符串上打印重复的字符? 此外,打印副本不应单独列出每个字母,而应只是一系列字母。最常遇到的字母应该放在序列的前面。 我给了字符串。输出我得到相同的字符串

提前致谢

【问题讨论】:

  • 请编辑您的问题,使其有意义且可读。这些句子没有任何意义:“此外,打印副本不应该单独列出每个字母,而应该只是一个字母序列。最常遇到的字母应该放在序列的前面。”
  • 你在问什么?
  • 例如单词 "barracuda" --> "aaarrbcud"
  • @Pavel 您打印的既不是排序也不是原始顺序的图案是什么?
  • 先是出现频率最高的字母,其次是比较少见的字母

标签: c string


【解决方案1】:

使用计数排序。见here 要根据频率排列字符,只需使用二维数组 array[255][2]。

根据您拥有的字符范围,有一个大小数组。例如,如果您的所有字符范围都具有array[255],并且每次读取值时都继续递增。如果你只有字母表有array[26]

然后使用qsort根据第一个索引对数组[][]进行排序

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

 int intcmp(const void *a,const void *b ){
 int *A = (int*)a;
 int *B = (int*)b;
 if( A[0]>B[0])
    return -1;
 if( A[0]<B[0])
    return 1;
 if( A[0]==B[0])
   return 0;
}
int main()
{
    char st[100];
    int ar[26][2]={0},size=0,i;
    scanf("%s",&st);

    for(i=0;st[i]!='\0';i++)
    {
       ar[st[i]-97][1]=st[i];
       ar[st[i]-97][0]++;
    }
    qsort(ar,26,sizeof(int)*2,intcmp);
    for(i=0;i<26;i++)
    {
       while(ar[i][0]--)
       printf("%c",ar[i][1]);
    }
 return 0;
 }

【讨论】:

  • urraaadbc --> 一定是aaarrbcud
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 2017-02-02
  • 2015-07-25
  • 2016-06-09
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多