PDA

Просмотр полной версии : [Function] strequal Fix



m1n1vv
11.11.2017, 02:46
Описание:

Функция для сравнения строковых переменных и значений.

Параметры:

const string1 – первая последовательность
const string2 – вторая последовательность
bool:ignorecase – (true/false – регистр не учитывается/учитывается)
length – длина строки


Возвращаемое значение:

Возвращает значение, отличное от нуля, если строки равны.

Плюсы реализации:

Исправлена вероятность положительного результата при одной пустой строке, и отрицательного при двух.

Код:

stock bool:strequal(const string1[], const string2[], bool:ignorecase = false, length = cellmax)
{
new
s1 = string1[0],
s2 = string2[0];

if ((s1 == '\0' || s2 == '\0') && (s1 != s2))
return false;

return strcmp(string1, string2, ignorecase, length) == 0;
}
Пример использования:

main()
{
new
str_1[12] = "Hello World",
str_2[12] = "Hello World",
bool:inequality = strequal(str_1, str_2);

printf("%i", inequality); //inequality = 1
}


Автор: m1n1vv

VVWVV
11.11.2017, 07:26
Используйте шаблон (http://pro-pawn.ru/showthread.php?12262) для оформления.

m1n1vv
11.11.2017, 07:42
Используйте шаблон (http://pro-pawn.ru/showthread.php?12262) для оформления.

Сделал

Daniel_Cortez
11.11.2017, 14:58
По сути та же самая функция strcmp, только с исправленным багом (который здесь не единственный, ещё один не исправлен; более полное исправление уже давно есть в fixes.inc (https://github.com/Open-GTO/sa-mp-fixes)) и инвертированным возвращаемым значением (0 вместо 1/-1 и 1 вместо 0).
И cтоило ли вообще выкладывать что-то настолько простое?