C ++中目录文件名的自然排序
我有一个目录列表,我想为其检索文件名并将它们放在字符串向量中,以便它们以“自然”方式排序。例如{ "10.txt" "0.txt" "2.txt"
"1.m" "Jan12" "July13.txt" "Nov25.txt" "Jane" "John" }
应该是{"0.txt" "1.m"
"2.txt" "10.txt" "Jan12" "July13.txt" "Nov25.txt" "Jane" "John" }
。最简单的方法是什么?
在阐述“自然”,我们假设从号码的部分组成的字符串 (N) 和文本 (T)
这样...(N)(T)...
,那么对于...(N1)(T1)...
和 ...(N2)(T2)...
会(N1<N2) (<)
(T1<T2)
,其中 (<)
暗示了正确的长期左边项优先。在这种情况下,如果数字在字符串中的相同位置(即),则数字优先于文本字段1.z (<)
1_t.txt
。
已经有一个库函数可以对字母数字字符串或目录条目进行这种排序吗?
所需的 文件 顺序 。文件名将存储在字符串向量中。
Abhinav@Abhinav-PC /cygdrive/c/AbhinavSamples/shell
$ ls -lv
total 8
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:51 1.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:55 1_t.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:50 3.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:51 4.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:53 10.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:56 10_t.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:56 13.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:53 20.txt
**Simple Sort**
Abhi@Abhi-PC /cygdrive/c/AbhinavSamples/shell
$ ls -l
total 8
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:51 1.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:53 10.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:56 10_t.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:56 13.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:55 1_t.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:53 20.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:50 3.txt
-rw-r--r--+ 1 Abhinav None 2 Mar 17 00:51 4.txt
-
glibc中有一个功能 完全可以满足您的需求 。不幸的是,它是C,而不是C
++,因此,如果可以接受的话,这是“开箱即用”的最简单的解决方案,而无需重新实现任何功能和重新设计轮子。顺便说一句:这与ls -lv
实施完全相同。其中最重要的部分是为您versionsort
执行 自然排序
的功能。在此用作的比较功能scandir
。下面的简单示例将按您希望的顺序打印当前目录中的所有文件/目录。#define _GNU_SOURCE #include <dirent.h> #include <stdlib.h> #include <stdio.h> int main(void) { struct dirent **namelist; int n,i; n = scandir(".", &namelist, 0, versionsort); if (n < 0) perror("scandir"); else { for(i =0 ; i < n; ++i) { printf("%s\n", namelist[i]->d_name); free(namelist[i]); } free(namelist); } return 0; }
-
以升序对目录中的文件名排序
2021-01-29 关注 0 浏览99 1答案
-
只读visibles目录的文件名
2021-01-29 关注 0 浏览103 1答案
-
在Bash中的文件路径参数中获取最后一个目录名/文件名
2021-02-01 关注 0 浏览77 1答案
-
在 Bash 的文件路径参数中获取最后一个目录名/文件名
2022-05-26 关注 0 浏览21 1答案
-
目录中每个文件的Linux Shell脚本获取文件名并执行程序
2021-02-01 关注 0 浏览101 1答案
-
从C中的文件描述符中检索文件名
2021-02-02 关注 0 浏览75 1答案
-
编写函数,获得目录下所有的文件名。
2021-10-21 关注 0 浏览135 1答案
-
如何遍历目录中的文件并更改路径并将后缀添加到文件名
2022-03-22 关注 0 浏览45 1答案
-
Bash脚本删除目录中多个文件名末尾的“ x”个字符?
2021-02-02 关注 0 浏览102 1答案
-
从C#中的URI字符串获取文件名
2021-02-02 关注 0 浏览96 1答案