strverscmp -
сравнение
двух строк
версий
Standard C library (
libc,
-lc)
#define _GNU_SOURCE /* см. feature_test_macros(7) */
#include <string.h>
int strverscmp(const char *s1, const char *s2);
Часто
имеются
файлы
jan1,
jan2, ...,
jan9,
jan10, … и при
выводе
списка
командой
ls(1)
они
выводятся
как
jan1,
jan10, ...,
jan2,
…,
jan9, что
несколько
не то, что
хотелось
бы. Чтобы
исправить
это, в GNU
добавлен
аргумент
командной
строки
-v
команды
ls(1),
который
реализован
через
функцию
versionsort(3),
которая, в
свою
очередь,
использует
функцию
strverscmp().
Таким
образом,
задача
функции
strverscmp()
в том, чтобы
сравнить
две строки
и найти
«правильную»
очередность,
в то время
как
strcmp(3)
обнаруживает
только
лексикографический
порядок.
Эта
функция не
использует
категорию
локали
LC_COLLATE,
что, в общем
случае,
означает,
что строки
должны
быть в
кодировке
ASCII.
Функция
делает
следующее.
Если обе
строки
равны, то
возвращается
0. Иначе
находится
позиция
между
двумя
байтами в
обеих
строках, до
которой
строки
равны, а
после
которой не
равны.
Далее
находятся
наибольшие
последовательные
строки
цифр,
содержащие
(или
начинающиеся,
или
заканчивающиеся)
эту
позицию.
Если такие
последовательности
не найдены
в обеих
строках, то
возвращается
такой же
результат,
какой
вернула бы
функция
strcmp(3)
(численная
сортировка
по
значениям
байтов). В
противном
случае обе
строки
цифр
сравниваются
численно.
При этом
строки,
начинающиеся
с одного
или более
нулей
рассматриваются
таким
образом,
как если бы
перед ними
стояла
десятичная
запятая (то
есть
строки
цифр
начинающиеся
с большего
количества
нулей,
будут идти
перед
строками с
меньшим
количеством).
Пример:
000,
00,
01,
010,
09,
0,
1,
9,
10.
Функция
strverscmp()
возвращает
целое
число
меньшее,
равное или
большее
нуля, если,
соответственно,
s1 должно
идти
раньше, на
том же
месте, или
позже
s2.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
strverscmp() |
Безвредность
в нитях |
MT-Safe |
Эта
функция
является
расширением
GNU.
Показанная
далее
программа
демонстрирует
поведение
strverscmp(). Функция
strverscmp()
используется
для
сравнения
двух строк,
заданных в
аргументах
командной
строки.
Пример
работы:
$ ./a.out jan1 jan10
jan1 < jan10
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char *argv[])
{
int res;
if (argc != 3) {
fprintf(stderr, "Usage: %s <string1> <string2>\n", argv[0]);
exit(EXIT_FAILURE);
}
res = strverscmp(argv[1], argv[2]);
printf("%s %s %s\n", argv[1],
(res < 0) ? "<" : (res == 0) ? "==" : ">", argv[2]);
exit(EXIT_SUCCESS);
}
rename(1),
strcasecmp(3),
strcmp(3),
strcoll(3)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]