#define _GNU_SOURCE
#include <string.h> int strverscmp(const char *s1, const char *s2);
Таким образом задача функции strverscmp в том, чтобы сравнить две строки и найти "правильную" очередность, в то время как strcmp обнаруживает только лексикографический порядок. Эта функция не использует категорию LC_COLLATE локали, что, в общем случае, означает, что строки должны быть в кодировке ASCII.
Функция делает следующее. Если обе строки равно, то возвращается 0. Иначе находится позиция между двумя байтами в обеих строках, до которой строки равны, а после которой не равны. Далее находятся наибольшие последовательные строки цифр, содержащие (или начинающиеся, или заканчивающиеся) эту позицию. Если такие последовательности не найдены в обеих строках, то возвращается такой же результат, какой вернула бы функция strcmp (численная сортировка по значениям байтов). В противном случае обе строки цифр сравниваются численно. При этом строки, начинающиеся с одного или более нулей рассматриваются таким образом, как если бы перед ними стояла десятичная запятая (то есть строки цифр начинающиеся с большего количества нулей, будут идти перед строками с меньшим количеством). Пример: 000, 00, 01, 010, 09, 0, 1, 9, 10.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |