Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
#define STRBUFSIZE ...char s1[STRBUFSIZE], s2[STRBUFSIZE]; /* Оригинальные строки */char s1x[STRBUFSIZE], s2x[STRBUFSIZE]; /* Преобразованные копии */size_t len1, len2;int cmp;/* ... заполнить s1 и s2 ... */len1 = strlen(s1);len2 = strlen(s2);if (strxfrm(s1x, s1, len1) >= STRBUFSIZE || strxfrm(s2x, s2, len2) >= STRBUFSIZE) /* слишком большой, восстановить */cmp = strcmp(s1x, s2x);if (cmp == 0) /* равны */else if (cmp < 0) /* s1 < s2 */else /* s1 > s2 */Для одноразовых сравнений, возможно, быстрее непосредственно использовать
strcoll()strxfrm()strcmp()strncmp()strcasecmp()13.2.4. Числовое и денежное низкоуровневое форматирование:
localeconv()Корректное форматирование числовых и денежных значений требует значительной низкоуровневой информации. Указанная информация доступна в
struct lconvlocaleconv()#include <locale.h> /* ISO С */struct lconv *localeconv(void);Подобно функции
ctime()struct lconv<locale.h>struct lconv { /* Числовая (не денежная) информация. */ char *decimal_point; /* Разделитель десятичной дроби. */ char *thousands_sep; /* Разделитель тысяч. */ /* Каждый элемент является числом цифр в каждой группе; элементы с большими индексами оставлены дальше. Элемент со значением CHAR_MAX означает, что дальнейшая группировка не производится. Элемент со значением 0 означает, что предыдущий элемент используется для всех оставшихся групп. */ char *grouping; /* Денежная информация. */ /* Первые три символа являются символами валют из ISO 4217. Четвертый символ является разделителем. Пятый символ ' '. */ char *int_curr_symbol; char *currency_symbol; /* Символ местной валюты. */ char *mon_decimal_point; /* Символ десятичной точки. */ char *mon_thousands_sep; /* Разделитель тысяч. */ char *mon_grouping; /* Аналогично элементу 'группировки' (выше). */ char *positive_sign; /* Знак для положительных значений. */ char *negative_sign; /* Знак для отрицательных значений. */ char int_frac_digits; /* Международные цифры дробей. */ char frac_digits; /* Местные цифры дробей. */ /* 1, если символ валюты перед положит, значением, 0, если после. */ char p_cs_precedes; /* 1, если символ валюты отделяется от положит, значения пробелом. */ char p_sep_by_space; /* 1, если символ валюты перед отриц. значением, 0, если после. */ char n_cs_precedes; /* 1, если символ валюты отделяется от отриц. значения пробелом. */ char n_sep_by_space; /* Размещение положительного и отрицательного знака: 0 Количество и символ валюты окружены скобками. 1 Строка знака перед количеством и символом валюты. 2 Строка знака за количеством и символом валюты. 3 Строка знака непосредственно перед символом валюты. 4 Строка знака непосредственно после символа валюты. */ char p_sign_posn; char n_sign_posn; /* 1, если int_curr_symbol до положит. значения, 0, если после. */ char int_p_cs_precedes; /* 1, если int_curr_symbol отделен от положит, знач. пробелом. */ char int_p_sep_by_space; /* 1, если int_curr_symbol перед отриц. значением, 0, если после. */ char int_n_cs_precedes; /* 1, если int_curr_symbol отделен от отриц. знач. пробелом. */ char int_n_sep_by_space; /* Размещение положительного и отрицательного знака: 0 Количество и int_curr_symbol окружены скобками. 1 Строка знака до количества и int_curr_symbol. 2 Строка знака после количества и int_curr_symbol. 3 Строка знака непосредственно до int_curr_symbol. 4 Строка знака непосредственно после int_curr_symbol. */