OneCompiler

slip7 & slip 21

148

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

int isDirectory(const char* path) {
struct stat statbuf;
if (stat(path, &statbuf) != 0) {
return 0;
}

return S_ISDIR(statbuf.st_mode);

}

int compareStrings(const void* a, const void* b) {
return strcmp((const char**)a, (const char)b);
}

int main() {
DIR* dir;
struct dirent* entry;
char** directories = NULL;
int numDirectories = 0;

dir = opendir(".");
if (dir == NULL) {
    perror("Error opening directory");
    return 1;
}

while ((entry = readdir(dir)) != NULL) {
    if (isDirectory(entry->d_name)) {
        // Ignore "." and ".." directories
        if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            continue;
        }

        directories = realloc(directories, (numDirectories + 1) * sizeof(char*));
        if (directories == NULL) {
            perror("Error allocating memory");
            return 1;
        }

        directories[numDirectories] = strdup(entry->d_name);
        if (directories[numDirectories] == NULL) {
            perror("Error allocating memory");
            return 1;
        }

        numDirectories++;
    }
}

qsort(directories, numDirectories, sizeof(char*), compareStrings);

printf("Subdirectories in alphabetical order:\n");
for (int i = 0; i < numDirectories; i++) {
    printf("%s\n", directories[i]);
    free(directories[i]);
}

free(directories);
closedir(dir);

return 0;

}