View Code of Problem 36

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

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

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

int main(void)
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        node arr[1000];
        char str[1000];
        scanf("%s",str);
        int index = 0,i,len = strlen(str);
        for(i = 0;i < len;i++)
        {
            arr[i].num = i;
            arr[i].ch = str[i];
            if(arr[i].ch < 'A' || arr[i].ch > 'Z')
            {
                i--;len--;
            }
        }
        qsort(arr,len,sizeof(node),comp);
        for(i = 0;i < len;i++)
        {
            index++;
            if(i == len - 1)
                printf("%d%c\n",index,arr[i].ch);
            else
            {
                if(arr[i].ch != arr[i + 1].ch)
                {
                    printf("%d%c",index,arr[i].ch);
                    index = 0;
                }
            }
        }
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 36