c语言写一个排序,获取目录文件名中最早的文件夹名称
时间: 2024-02-21 14:58:29 浏览: 84
好的,我可以为您提供一个简单的C语言程序,以获取目录中最早的文件夹名称。程序中使用冒泡排序算法进行排序。
```c
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
void swap(char **str1, char **str2){
char *temp = *str1;
*str1 = *str2;
*str2 = temp;
}
int main(){
DIR *dir;
struct dirent *entry;
struct stat statbuf;
char **dir_list;
int i, j, count = 0;
// 打开目录
if((dir = opendir(".")) == NULL){
perror("opendir");
exit(1);
}
// 统计目录中的文件夹数目
while((entry = readdir(dir)) != NULL){
if(entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0)
count++;
}
// 为文件夹列表动态分配内存
dir_list = (char **)malloc(count * sizeof(char *));
for(i = 0; i < count; i++)
dir_list[i] = (char *)malloc(sizeof(char) * 256);
// 读取目录中的文件夹名称
rewinddir(dir);
i = 0;
while((entry = readdir(dir)) != NULL){
if(entry->d_type == DT_DIR && strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0){
strcpy(dir_list[i], entry->d_name);
i++;
}
}
// 冒泡排序
for(i = 0; i < count - 1; i++){
for(j = 0; j < count - i - 1; j++){
if(strcmp(dir_list[j], dir_list[j+1]) > 0)
swap(&dir_list[j], &dir_list[j+1]);
}
}
// 输出排序后的文件夹名称
printf("目录中最早的文件夹名称为:%s\n", dir_list[0]);
// 释放动态分配的内存
for(i = 0; i < count; i++)
free(dir_list[i]);
free(dir_list);
// 关闭目录
closedir(dir);
return 0;
}
```
程序通过 opendir() 函数打开当前目录,然后使用 readdir() 函数遍历目录中的所有文件和文件夹,统计出文件夹的数目。然后动态分配内存,将文件夹名称保存到数组中。使用冒泡排序算法对文件夹名称进行排序,最后输出排序后的第一个元素即为最早的文件夹名称。
需要注意的是,程序中使用了 dirent.h 和 sys/stat.h 头文件,需要链接对应的库文件。在 Linux 平台下,可以使用以下命令编译程序:
```
gcc -o sort_directory sort_directory.c -ldir
```
在 Windows 平台下,可以使用以下命令编译程序:
```
gcc -o sort_directory sort_directory.c
```
希望能对您有所帮助!
阅读全文