У меня есть список каталогов, для которого я хочу получить имена файлов и поместить их в вектор строки таким образом, чтобы они были отсортированы "естественным" образом. например { "10.txt" "0.txt" "2.txt" "1.m" "12 января" "13 июля.txt" "25 ноября.txt" "Джейн" "Джон" }
должно быть {"0.txt" "1.m" "2.txt" "10.txt" "12 января" "13 июля.txt" "25 ноября.txt" "Джейн" "Джон" }
. Как это сделать проще всего?
Разрабатывая понятие «натуральный», мы предполагаем, что строка состоит из частей чисел (N)и текста (T), такая что ...(N) (T)...
, то для ...(N1)(T1)...
и ...(N2)(T2)...
будет быть (N1
(<)
подразумевает приоритет левого термина над правым. В этом случае числа имеют приоритет над текстовыми полями, если они находятся в той же позиции в строке, то есть 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