Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизСравнивание стрингов Найти похожие ветки
← →
Pasha L (2005-06-11 01:49) [0]Здравствуйте. Столкнулся я с такой проблемой. Я хочу сравнить две переменные типа string, а именно - только их текст. А получается, что сравнивается и регистр букв. То есть "abc"="ABC" возвращает false. Как сделать, чтобы сравнивался только текст стрингов.
← →
Pasha L (2005-06-11 01:53) [1]Извините. Нашел lowercase;
← →
Германн © (2005-06-11 01:59) [2]А как сравниваешь? В этом-то и вся суть!
А "abc"="ABC"- всегда вернет False!
Легче всего при сравнении использовать функции переводящие строки в определенный вид. Либо в строчный, либо в прописной. Как правило в Делфи присутствует большей частью первый вариант.
← →
Юрий Зотов © (2005-06-11 02:14) [3]F1 - AnsiSameText & See also.
← →
Anatoly Podgoretsky © (2005-06-11 08:48) [4]Юрий Зотов © (11.06.05 02:14) [3]
Учитывает ли он локализацию, например железно-дорожный и железнодорожный это один и тот же текст. MS SQL делает, а вот за эту функцию не уверен.
← →
Юрий Зотов © (2005-06-11 10:14) [5]> Anatoly Podgoretsky © (11.06.05 08:48) [4]
AnsiSameText локализацию учитывает.
Только "железно-дорожный" - это не локализация а ошибка. :о)
← →
Anatoly Podgoretsky © (2005-06-11 10:17) [6]Юрий Зотов © (11.06.05 10:14) [5]
Это не ошибка, слова можно написать с тире и без, от этого суть не меняется. Я не зря привел MSSQL тот делает по полной локализации. Локализация это не только чувствительность к регистру, но и многое другое.
Приведу другой пример с телефонами
1234567
123-4567
123-45-67
← →
ferr © (2005-06-11 10:35) [7]
function AnsiSameText(const S1, S2: string): Boolean;
begin
Result := AnsiCompareText(S1, S2) = 0;
end;
Зачем такая избыточность?
← →
-=XP=- © (2005-06-11 13:56) [8]Anatoly Podgoretsky © (11.06.05 10:17) [6]
Это уже функция ParseMind(), но идет только с Delphi 2050.
← →
-=XP=- © (2005-06-11 14:36) [9]Зачем такая избыточность?
Это не избыточность.
Все для удобства программиста. ;)
Сравните:
if (<SomeCondition>) and (ANSICompareText(S1, S2) = 0) then
и
if (<SomeCondition>) and ANSISameText(S1, S2) then
Мне кажется, интуитивно понятнее второе.
← →
[lamer]Barmaglot © (2005-06-11 23:22) [10]Алгоритмы точного сравнения строк:
Brute Force
Automaton
Karp-Rabin
Shift Or
Morris-Pratt
Knuth-Morris-Pratt
Simon
Colussi
Galil-Giancarlo
Apostolico-Crochemore
Not So Naive
Forward Dawg Matching
Boyer-Moore
Turbo-BM
Apostolico-Giancarlo
Reverse Colussi
Horspool
Quick Search
Tuned Boyer-Moore
Zhu-Takaoka
Berry-Ravindran
Smith
Raita
Reverse Factor
Turbo Reverse Factor
Backward Oracle Matching
Galil-Seiferas
Two Way
и т.д.
p.s. Просто для того, что бы вы поняли, что здесь все не так просто как кажется :-)
← →
KosilkA © (2005-06-11 23:59) [11]А чем плоха Windows.CompareString ?
The CompareString function compares two character strings, using the locale specified by the given identifier as the basis for the comparison.
int CompareString(
LCID Locale, // locale identifier
DWORD dwCmpFlags, // comparison-style options
LPCTSTR lpString1, // pointer to first string
int cchCount1, // size, in bytes or characters, of first string
LPCTSTR lpString2, // pointer to second string
int cchCount2 // size, in bytes or characters, of second string
);
......
dwCmpFlags
A set of flags that indicate how the function compares the two strings. By default, these flags are not set. This parameter can specify zero to get the default behavior, or it can be any combination of the following values:
Value Meaning
NORM_IGNORECASE Ignore case.
NORM_IGNOREKANATYPE Do not differentiate between Hiragana and Katakana characters. Corresponding Hiragana and Katakana characters compare as equal.
NORM_IGNORENONSPACE Ignore nonspacing characters.
NORM_IGNORESYMBOLS Ignore symbols.
NORM_IGNOREWIDTH Do not differentiate between a single-byte character and the same character as a double-byte character.
SORT_STRINGSORT Treat punctuation the same as symbols.
...
Return Values
If the function succeeds, the return value is one of the following values:
Value Meaning
1 The string pointed to by the lpString1 parameter is less in lexical value than the string pointed to by the lpString2 parameter.
2 The string pointed to by lpString1 is equal in lexical value to the string pointed to by lpString2.
3 The string pointed to by lpString1 is greater in lexical value than the string pointed to by lpString2.
← →
PsyhoBlob (2005-06-12 03:24) [12]Стринги бывают разных цветов да и размер тоже разный :))))
← →
Anatoly Podgoretsky © (2005-06-12 11:50) [13]KosilkA © (11.06.05 23:59) [11]
Хорошая функция, ни когда не обращал ранее на нее внимания. Это как раз то, про что говорил в [4] и в [6]
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.037 c