2015-10-21 3 views
-1

Я хотел бы знать, как печатать дубликаты символов в строке? Кроме того, копии дубликатов не должны содержать буквы отдельно, а просто последовательность букв. Наиболее часто встречающаяся буква должна быть помещена перед последовательностью. Я дал строку. Выход я получаю ту же строкуКак найти и распечатать повторяющиеся символы в строке?

Заранее спасибо

+2

Пожалуйста, измените вопрос так, что это имеет смысл и может быть прочитан. Эти предложения не имеют никакого смысла: «Кроме того, дубликаты печати не должны содержать каждую букву отдельно, а просто последовательность букв. Наиболее часто встречающаяся буква должна быть помещена перед последовательностью». – jaybers

+0

Что ты спрашиваешь? –

+0

Например, Слово "barracuda" -> "aaarrbcud" – Dom

ответ

0

использования подсчета sort.see here Для размещения символов на основе частоты просто использовать 2d массив 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; 
} 
+0

urraaadbc -> Это должно быть aaarrbcud – Dom

+0

Было просто для того, чтобы дать вам эту идею, но все же проверить сейчас ... – wrangler

+0

Wrangler, thanks – Dom

Смежные вопросы