Skip to content

Instantly share code, notes, and snippets.

@brbsh
Last active December 17, 2015 08:59
Show Gist options
  • Save brbsh/5584046 to your computer and use it in GitHub Desktop.
Save brbsh/5584046 to your computer and use it in GitHub Desktop.
PAWN substring deleter
/*
Функция для вырезания подстроки из строки назначения
strsubdel(string[], const sub[], bool:sensetive = true, bool:repeating = true)
Аргументы:
string[] - строка обработки (назначения)
sub[] - подстрока, или то что нужно вырезать
bool:sensetive (true/false) - если true, функция будет чувствительна к регистру, иначе - нет
bool:repeating (true/false) - если true, вырежет все найденные подстроки, иначе - первую попавшуюся
Возвращает:
-1 - Возникла ошибка (строка пуста/введена пустая подстрока)
Иначе вернет количество вырезанных подстрок
*/
stock strsubdel(string[], const sub[], bool:sensetive = true, bool:repeating = true)
{
if((string[0] <= '\1') || (sub[0] <= '\1')) return -1;
new sublen = strlen(sub);
new found;
if(repeating)
{
new rt;
while((found = strfind(string, sub, !sensetive)) != -1)
{
strdel(string, found, (found + sublen));
rt++;
}
return rt;
}
if((found = strfind(string, sub, !sensetive)) == -1) return -1;
strdel(string, found, (found + sublen));
return 1;
}
/*
Функция для вырезания подстрок из строки назначения
strsubdel_ex(string[], bool:sensetive, bool:repeating, ...)
Аргументы:
string[] - строка обработки (назначения)
bool:sensetive (true/false) - если true, функция будет чувствительна к регистру, иначе - нет
bool:repeating (true/false) - если true, вырежет все найденные подстроки, иначе - первую попавшуюся
... - подстроки, которые нужно вырезать
Возвращает:
-1 - Возникла ошибка (строка пуста/введена пустая подстрока/превышено количество аргументов)
Иначе вернет количество вырезанных подстрок
*/
stock strsubdel_ex(string[], bool:sensetive, bool:repeating, ...)
{
new args;
if((string[0] <= '\1') || ((args = numargs()) == 3)) return -1;
for(new current = 3, arg[256], i; current != args; current++)
{
while((arg[i] = getarg(current, i))
{
i++;
}
arg[i] = 0;
if((args = strfind(string, arg, !sensetive)) == -1) continue;
if(!repeating)
{
strdel(string, args, (args + strlen(arg)));
rt++;
continue;
}
else
{
while((args = strfind(string, arg, !sensetive)) != -1)
{
strdel(string, args, (args + strlen(arg)));
rt++;
}
}
}
return rt;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment