Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 192

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

#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 lconv
, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
localeconv()
:

#include <locale.h> /* ISO Π‘ */

struct lconv *localeconv(void);

Подобно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ctime()
, эта функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ статичСскиС Π΄Π°Π½Π½Ρ‹Π΅. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ копию Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, Ссли локаль измСнилась. Π’ΠΎΡ‚
struct lconv
(слСгка сТатая), нСпосрСдствСнно ΠΈΠ· GLIBC
<locale.h>
:

struct lconv {

Β /* Числовая (Π½Π΅ дСнСТная) информация. */

Β char *decimal_point; /* Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ дСсятичной Π΄Ρ€ΠΎΠ±ΠΈ. */

Β char *thousands_sep; /* Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ тысяч. */

Β /* ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт являСтся числом Ρ†ΠΈΡ„Ρ€ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅;

Β Β Β  элСмСнты с большими индСксами оставлСны дальшС. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ со

Β Β Β  Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ CHAR_MAX ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ дальнСйшая Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π΅

Β Β Β  производится. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ

Β Β Β  элСмСнт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для всСх ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π³Ρ€ΡƒΠΏΠΏ. */

Β char *grouping;

Β /* ДСнСТная информация. */

Β /* ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ символа ΡΠ²Π»ΡΡŽΡ‚ΡΡ символами Π²Π°Π»ΡŽΡ‚ ΠΈΠ· ISO 4217.

Β Β Β  Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ символ являСтся Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ. ΠŸΡΡ‚Ρ‹ΠΉ символ '\0'. */

Β 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. */