The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Сравнение строк на C/C++"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Сравнение строк на C/C++"
Сообщение от XMan Искать по авторуВ закладки on 14-Мрт-04, 02:44  (MSK)
Никто не подскажет, как сравнить две строки с учетом регистра и локали на C/C++ ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Сравнение строк на C/C++"
Сообщение от pth Искать по авторуВ закладки on 15-Мрт-04, 07:54  (MSK)
>Никто не подскажет, как сравнить две строки с учетом регистра и локали
>на C/C++ ?


strcoll

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Сравнение строк на C/C++"
Сообщение от XMan Искать по авторуВ закладки on 15-Мрт-04, 19:20  (MSK)
strcoll сравнивает без учета регистра. То есть, "А" и "а" считаются одинкаковыми.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Сравнение строк на C/C++"
Сообщение от pth Искать по авторуВ закладки on 15-Мрт-04, 19:25  (MSK)
>strcoll сравнивает без учета регистра. То есть, "А" и "а" считаются одинкаковыми.
>

Кто тебе это сказал?

Ты проверял? Может локаль кривая?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Сравнение строк на C/C++"
Сообщение от XMan Искать по авторуВ закладки on 15-Мрт-04, 21:38  (MSK)
Исходники 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 строк перевода и сравнения :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру