Camel Case 4

  • + 0 comments

    I'm having trouble using C ,even if the output is the same as the input .

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void Split(char Case, char *IName);
    void Combine(char Case, char *IName);
    void Switch(char Op, char Case, char *IName);
    void Split_IName(char *IName);
    void CombineIName(char *IName);
    
    int main() {
        char Buffer[128];
        char *Op = NULL;
        char *Case = NULL;
        char **IName = NULL;
        int line = 0;
    
        while (fgets(Buffer, 128, stdin) != NULL) {
            if (strchr(Buffer, '\n')) {
                Buffer[strcspn(Buffer, "\n")] = '\0';
            }
            Op = realloc(Op, (line + 1) * sizeof(char));
            Case = realloc(Case, (line + 1) * sizeof(char));
            IName = realloc(IName, (line + 1) * sizeof(char*));
            IName[line] = malloc(48);
            sscanf(Buffer, "%c;%c;%[^\n]", &Op[line], &Case[line], IName[line]);
            line++;
            memset(Buffer, '\0', sizeof(Buffer));
        }
        
        for (int i = 0; i < line; i++) {
            Switch(Op[i], Case[i], IName[i]);
            printf("%s\n", IName[i]);
            free(IName[i]); 
        }
        
        free(IName); 
        free(Op);
        free(Case);
    
        return 0;
    }
    
    void Switch(char Op, char Case, char *IName) {
        switch (Op) {
            case 'S':
                Split(Case, IName);
                break;
            case 'C':
                Combine(Case, IName);
                break;
            default:
                break;
        }
    }
    
    void Split(char Case, char *IName) {
        switch (Case) {
            case 'M':
                IName[strcspn(IName, ")")] = '\0';
                IName[strcspn(IName, "(")] = '\0';
                Split_IName(IName);
                break;
            case 'C':
                if ((int)IName[0] <= 90 && (int)IName[0] >= 65) {
                    IName[0] = (char)((int)IName[0] + 32);
                }
                Split_IName(IName);
                break;
            case 'V':
                Split_IName(IName);
                break;
            default:
                break;
        }
    }
    
    void Combine(char Case, char *IName) {
        switch (Case) {
            case 'C':
                if ((int)IName[0] >= 97 && (int)IName[0] <= 122) {
                    IName[0] = (char)((int)IName[0] - 32);
                }
                CombineIName(IName);
                break;
            case 'M':
                CombineIName(IName);
                strcat(IName, "()");
                break;
            case 'V':
                CombineIName(IName);
                break;
            default:
                break;
        }
    }
    
    void Split_IName(char *IName) {
        int index2, index = 0;
        int len = strlen(IName);
        while (IName[index]) {
            if ((int)IName[index] <= 90 && (int)IName[index] >= 65) {
                IName[index] = (char)((int)IName[index] + 32);
                index2 = len;
                while (index2 > index) {
                    IName[index2] = IName[index2 - 1];
                    index2--;
                }
                len++;
                IName[index2] = ' ';
            }
            index++;
        }
    }
    
    void CombineIName(char *IName) {
        int index2, index = 0;
        while (IName[index]) {
            if (IName[index] == ' ') {
                if ((int)IName[index + 1] >= 97 && (int)IName[index + 1] <= 122) {
                    IName[index + 1] = (char)((int)IName[index + 1] - 32);
                }
                index2 = index;
                while (IName[index2]) {
                    IName[index2] = IName[index2 + 1];
                    index2++;
                }
            }
            index++;
        }
    }
            index++;
        }
    }