• + 0 comments

    This one is my solution. Please let me know if anything that i can do better here.

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <stdlib.h>
    
    #define RANGE 10
    #define ASCII_RANGE 26
    
    char ascii_table_array[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    
    /**
    @param digit -  the digit of character or number from input string
    @return 1 is true else 0 if fails
    */
    int isChar(int digit) {
        for (int i = 0; i < ASCII_RANGE; i++) {
            if (ascii_table_array[i] == digit) {
                return 1;
            }
        }
        return 0;
    }
    
    void addToArray(int item,int* doneArray) {
        int emptyIdx = 0;
        for (int i = 0 ;i < 100;i++) {
            if (doneArray[i] == 0) {
                emptyIdx = i;    
                break;
            }
        }
        
        doneArray[emptyIdx] = item;
    }
    
    // returns 1 if any match found else returns 0
    int isAlreadyDone(int item,int* doneArray) {
        for (int i = 0; i < 100;i++) {
            if (doneArray[i] == item) {
                return 1;
            }
        }
        return 0;    
    }
    
    int* getResult(char* input) {
        int counter = 0;
        int tempIdx = 0;
        int* result_array = (int*)malloc(sizeof(int) * 10);
        int* doneArray = (int*) malloc(sizeof(int) * 100);
        
        int inputRange = strlen(input);
        
        for (int i = 0; i < inputRange; i++) {
            if (isChar(input[i])) {
                // result_array[i] = 0;
                continue;
            }
            counter++;
            tempIdx = i;
            
            for (int j = 0; j < inputRange; j++) {
                if (isAlreadyDone(input[tempIdx],doneArray) == 0) {
                   if (tempIdx > j) {
                        if (input[tempIdx] == input[j]) {
                            counter++;                    
                        }
                   }
                }
            }
            
            if (input[tempIdx] == '0') {
                result_array[0] = counter;
                addToArray(0, doneArray);
            } else if (input[tempIdx] == '1') {
                result_array[1] = counter;
                addToArray(1, doneArray);
            } else if (input[tempIdx] == '2') {
                result_array[2] = counter;
                addToArray(2, doneArray);
            } else if (input[tempIdx] == '3') {
                result_array[3] = counter;
                addToArray(3, doneArray);
            } else if (input[tempIdx] == '4') {
                result_array[4] = counter;
                addToArray(4, doneArray);
            } else if (input[tempIdx] == '5') {
                result_array[5] = counter;
                addToArray(5, doneArray);
            } else if (input[tempIdx] == '6') {
                result_array[6] = counter;
                addToArray(6, doneArray);
            } else if (input[tempIdx] == '7') {
                result_array[7] = counter;
                addToArray(7, doneArray);
            } else if (input[tempIdx] == '8') {
                result_array[8] = counter;
                addToArray(8, doneArray);
            } else if (input[tempIdx] == '9') {
                result_array[9] = counter;
                addToArray(9, doneArray);
            }
            counter = 0; // reseting the coutner
            tempIdx = 0; // reseting the tempIdx
        }
        
        
        
       return result_array; 
    }
    
    int main() {
        char* input = (char*)malloc(sizeof(char)*10000);
        scanf("%s",input);
        
        int* result = getResult(input);
        
        for (int i = 0; i < RANGE; i++ ){
            printf("%d ",result[i]);
        }
        
        free(input);
        free(result);
        return 0;
    }