|
|
|
Linux/C++ - strlwr ?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Простой вопрос: нужен аналог strlwr или strupr под линукс. Locale-independant (для ASCII сам написать смогу :)). Быстрый поиск google'ом показал, что эти функции не являются частью стандарта C++ посему их в C++шных инклюдах нету. Нужно просто перегнать две строки в верхний или нижний регистр, дабы потом скормить своей функции case-insensitive сравнения... Или же можно использовать функцию, которая умеет сравнивать строку с паттерном (вилдкарды (*,?), можно и регэкспы, хотя вилдкарлдов за глаза хватит), при этом у функции есть возможность указать CaseSensitivity. Чем воспользоваться? (на ум приходит только, разве что, pcre и iconv, которые я ещё не смотрел, и где, вероятно, такие фукнции должны быть). Спасибо. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 11:29:34 |
|
||
|
Linux/C++ - strlwr ?
|
|||
|---|---|---|---|
|
#18+
Если хочется универсальности, то strupr/strlwr не помогут. Не во всех языках это будет работать. Для сравнения, по идее, нужно приводить к некоему каноническому виду. Функции такой в природе не встречал, да и не искал - она легко пишется по материалам доступным из unicode. Ищите CaseFolding.txt. Вот выдержка оттуда: # Case Folding Properties # # This file is a supplement to the UnicodeData file. # It provides a case folding mapping generated from the Unicode Character Database. # If all characters are mapped according to the full mapping below, then # case differences (according to UnicodeData.txt and SpecialCasing.txt) # are eliminated. Только нужно иметь в виду, что результирующая строка не обязательно имееет смысл в каком-либо языке, а значит может использоваться только для сравнения. Правда, если мне не изменяет память, там есть еще один файл (SpecialCasing?), для случаев, когда нужно обрабатывать последовательности букв (например, ss в некоторое подобие буквы b в немецком). Там же была и информация как изменять регистр, и объяснения, почему не во всех языках так можно сделать. Возможно нужно копать в направлении icu. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 12:10:53 |
|
||
|
Linux/C++ - strlwr ?
|
|||
|---|---|---|---|
|
#18+
teras wrote: > Если хочется универсальности, то strupr/strlwr не помогут. Не во всех > языках это будет работать. Для сравнения, по идее, нужно приводить к > некоему каноническому виду. Функции такой в природе не встречал, да и > не искал - она легко пишется по материалам доступным из unicode. Гм. Не ожидал такого поворота событий :) Насчет "всех языков" - это понятно, заглавные буквы есть не везде. Что касается unicode - это хорошая мысль, только, например, у меня koi8-r - т.е. надо будет конвертить. Просто вопрос об этой функции возник из-за того, что WinAPI предлагал что-то такое locale-независимое (насколько шустро оно работало, не знаю), плюс в дельфе была похожая вещь, хотя, скорее всего, это опять же был враппер над функцией WinAPI. Ну это ладно, спасибо за помощь, думаю, вопрос решится ковырянием исходников find, например, так как там есть case-insensitive сравнение строки с паттерном. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 16:37:59 |
|
||
|
Linux/C++ - strlwr ?
|
|||
|---|---|---|---|
|
#18+
ErVГм. Не ожидал такого поворота событий :) Насчет "всех языков" - это понятно, заглавные буквы есть не везде. Что касается unicode - это хорошая мысль, только, например, у меня koi8-r - т.е. надо будет конвертить. Дело не с том, что нет заглавных букв, а в том, что это представление не всегда подходит для сравнения, например, при использовании диактрических знаков, изменяется код буквы, но не изменяется отношение эквивалентности. Насколько я помню, в ICU есть регулярные выражения на основании unicode. Если с ним не хочется связываться, можно использовать strxfrm - она преобразует строку в каноническое представление. Преобразованные строки можно сравнивать strcmp, на больше/меньше/равно, но тоже не факт, что результат читаемый. В win32 такого не помню - может речь о strcoll и иже с ней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 19:11:34 |
|
||
|
Linux/C++ - strlwr ?
|
|||
|---|---|---|---|
|
#18+
teras wrote: > В win32 такого не помню - может речь о strcoll и иже с ней? Нет, CharLower, CompareString и прочие из той же категории. http://msdn2.microsoft.com/en-us/library/ms646979.aspx [rant]Млин, ну почему msdn так криво сделан...[/rant Возможно, что есть и ещё несколько - я этими функциями почти не пользовался, только когда под дельфю программил пару раз на них через справку выкидывало... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2007, 20:57:47 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=277&tid=2028168]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 363ms |

| 0 / 0 |
