Untitled

 avatar
unknown
plain_text
3 years ago
1.6 kB
3
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MySize 1000

char getSubsequence(char s[], int binary, int len, char *sub)
{
    for (int j = 0; j < len; j++)
    {
        if (binary & (1 << j))
            sub[strlen(sub)] = s[j];
    }
    return sub;
}

int main()
{
    //char input[MySize] = "abc";
    //char input[MySize] = "aac";
    char input[MySize] = "aabc";

    int len = strlen(input);
    int limit = pow(2, len);
    int count[len];
    char mySub[len][limit][MySize];

    for (int i = 0; i < len; i++)
    {
        count[i] = 0;
    }
    for (int i = 1; i <= limit - 1; i++)
    {
        char sub[MySize] = "";
        int duplicate = 0;

        getSubsequence(input, i, len, sub);

        int lenOfSub = strlen(sub) - 1;
        int currentCount = count[lenOfSub];

        for(int j = 0; j < count[lenOfSub]; j++)
        {
            if(strcmp(&mySub[lenOfSub][j][0], sub) == 0)
            {
                duplicate = 1;
                break;
            }
        }
        if(!duplicate)
        {
            strcpy(&mySub[lenOfSub][currentCount][0], sub);
            count[lenOfSub]++;
        }
    }
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < count[i]; j++)
        {
            if(i == 0 && j == 0)
            {
                printf("%s", &mySub[i][j][0]);
            }
            else
            {
                printf(", %s", &mySub[i][j][0]);
            }
        }
    }

    return 0;
}
Editor is loading...