View Code of Problem 36

#include <stdio.h>
#include <string.h>

typedef struct node{
    int num;
    char c;
}node;

int comp(const void* a,const void* b)
{
    node* c = (node*)a;
    node* d = (node*)b;
    if(c->c == d->c)
        return c->num - d->c;
    else
        return (int)(c->c - d->c);
}

int main(void)
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        node a[1000];
        char str[1000];
        getchar();
        gets(str);
        int i,n = strlen(str),index = 0;
        for(i = 0;i < n;i++)
        {
            a[i].num = i;
            a[i].c = str[i];
        }
        qsort(a,n,sizeof(node),comp);
        for(i = 0;i< n;i++)
        {
            index++;
            if(a[i].c != a[i + 1].c)
            {
                printf("%d%c",index,a[i].c);
                index = 0;
            }
        }
        printf("\n");
    }
}

Double click to view unformatted code.


Back to problem 36