strverscmp
—
compare strings according to natural order
Standard C Library (libc, -lc)
#include
<string.h>
int
strverscmp
(const
char *s1, const char
*s2);
The
strverscmp
()
function compares the null-terminated strings s1 and
s2 according to their natural order and returns an
integer greater than, equal to, or less than 0, depending on whether
s1 is greater than, equal to, or less than
s2.
More specifically, this natural order is found
by iterating over both strings until a difference is found. If the
difference is between non-decimal characters,
strverscmp
()
acts like
strcmp(3)
(thus, the ordering would be "a", "b",
"train"). If a decimal digit is found, the whole number is read
and compared (thus, the ordering would be "9", "10",
"420" which is different to lexicographic order, what
strcmp(3)
would have done). Numbers with leading zeroes are interpreted as fractional
parts (even without a decimal point), and numbers with more leading zeroes
are placed before numbers with fewer leading zeroes (thus, the ordering
would be "000", "00", "01", "010",
"09", "0", "1", "9",
"10").
The strverscmp
() function is a GNU
extension and conforms to no standard.
The strverscmp
() function was added in
FreeBSD 13.2.