Никто не подскажет, как сравнить две строки с учетом регистра и локали на C/C++ ?
>Никто не подскажет, как сравнить две строки с учетом регистра и локали
>на C/C++ ?
strcoll
strcoll сравнивает без учета регистра. То есть, "А" и "а" считаются одинкаковыми.
>strcoll сравнивает без учета регистра. То есть, "А" и "а" считаются одинкаковыми.
>Кто тебе это сказал?
Ты проверял? Может локаль кривая?
Исходники mc 4.6.0, 73-я строка файла src/dir.c:---
g_strcasecmp() doesn't work well in some locales because it relies on
the locale-specific toupper(). On the other hand, strcoll() is case
sensitive in the "C" and "POSIX" locales, unlike other locales.
Solution: always use strcmp() for case sensitive sort. For case
insensitive sort use strcoll() if it's case insensitive for ASCII and
g_strcasecmp() otherwise.
---Второе предложение.
Собственно, я потому и спросил - при "case sensitive" используется strcmp, который ничего никогда про локаль не знает. Соответственно, в koi8 его алфавит выглядит примерно, как "юабвдефг..."
Проблему-то я порешал, но пришлось переводить строки в "wide character" и сравнивать уже это. Вместо одной строки strcmp появилось 25 строк перевода и сравнения :)