Re: Коллекция функций / макросов -
raider19rus - 04.07.2012
Quote:
Originally Posted by Stepashka
при каждой итерации вызывается очень медленная функция strlen.
pawn Код:
SymbolCount(string[], symbol) { new count; for (new i; string[i] != EOS; ++i) { if (string[i] == symbol) ++count; } return count; }
|
Понятно.
Re: Коллекция функций / макросов -
OKStyle - 04.07.2012
А почему просто нельзя strlen ввести?
Re: Коллекция функций / макросов -
Stepashka - 04.07.2012
Quote:
Originally Posted by OKStyle
А почему просто нельзя strlen ввести? ![Cheesy](images/smilies/biggrin.png)
|
Потому что функция считает не длину строки, а количество вхождений определенного символа в строку.
Re: Коллекция функций / макросов -
OKStyle - 04.07.2012
Количество вхождений = количеству символов. Сам попробуй.
Re: Коллекция функций / макросов -
Stepashka - 04.07.2012
Quote:
Originally Posted by OKStyle
Количество вхождений = количеству символов. Сам попробуй.
|
длина строки 52 символа, но в неё входит 8 символов "о".
Начни гулять на свежем воздухе, а то я гляжу мозг начинает атрофироваться!
Re: Коллекция функций / макросов -
OKStyle - 05.07.2012
Окей. Видимо ты не понял, что нигде не указывается искомый символ.
Длина строки - 26 символов (не включая завершающий псведо-ноль), число вхождений "o" - 9 раз.
pawn Код:
new stepashka[] = "ololotrolololojavoditelnlo";
printf("%d", strlen(stepashka));
Исходя из твоих "гениальных" сообщений, мы должны получить 9, но получаем 26
![](http://forum.sa-mp.com/images/smilies/picard2.png)
. Завязывай гулять на свежем воздухе, а то мозг уже атрофировался. Это по поводу вопроса о strlen.
А по поводу вопроса о функции, которую опубликовал чел - надо описание адекватное составлять, тогда и путаницы не будет. Я прочитал описание и ответил, код не смотрел.
И я бы так тогда уж сделал:
pawn Код:
stock SymbolCount(string[], symbol)
{
for(new i = 0, count; string[i] != EOS; i++)
{
if(string[i] == symbol) count += 1;
}
return count;
}
Re: Коллекция функций / макросов -
Stepashka - 05.07.2012
Quote:
Originally Posted by OKStyle
Я прочитал описание и ответил, код не смотрел.
|
Не стать тебе программистом.
Re: Коллекция функций / макросов -
OKStyle - 05.07.2012
Quote:
Originally Posted by Stepashka
Не стать тебе программистом.
|
Поздно об этом думать.
Quote:
Originally Posted by ru.raider
Ошибка, кстати.
|
Какая?
Re: Коллекция функций / макросов -
-Stranger- - 26.09.2012
Так не проще не?
Code:
#define NFORMAT(%1,%2,%3,%4)\
((%1)%(10)==1&&(%1)%(100)!=11?(%2):(%1)%(10)>=2&&(%1)%(10)<=4&&((%1)%(100)<10||(%1)%(100)>=20)?(%3):(%4))
NFORMAT(num,"число","числа","чисел"));
Re: Коллекция функций / макросов -
GameMan - 26.09.2012
Quote:
Originally Posted by -Stranger-
Так не проще не?
Code:
#define NFORMAT(%1,%2,%3,%4)\
((%1)%(10)==1&&(%1)%(100)!=11?(%2):(%1)%(10)>=2&&(%1)%(10)<=4&&((%1)%(100)<10||(%1)%(100)>=20)?(%3):(%4))
NFORMAT(num,"число","числа","чисел"));
|
Намного проще, огромное спасибо
![Smiley](images/smilies/smile.png)
И твоя функция (или не твоя) в 2 раза быстрее, чем GetNeededWord
Тест в 1 000 000 интераций
![Cheesy](images/smilies/biggrin.png)
[26.09.2012 | 20:05:05] GetNeededWord - 494
[26.09.2012 | 20:05:05] NFORMAT - 280
Re: Коллекция функций / макросов -
-Stranger- - 26.09.2012
GameMan, ну вообще-то всё уже давно просчитано, написано и выложено:
http://translate.sourceforge.net/wiki/l10n/pluralforms
HidePlayerDialog -
DrSlett - 20.10.2012
Доброго времени суток.
Все знают функцию
ShowPlayerDialog. Но бывают такие моменты, когда необходимо "
скрыть" диалог, решение очень простое!
Добавьте в вашем коде:
PHP Code:
#define HidePlayerDialog(%0) ShowPlayerDialog(%0, -1, 0, "", "", "", "")
Готово!
Использование:
HidePlayerDialog(playerid);
Автор:
DrSlett
Re: HidePlayerDialog -
eakwarp - 20.10.2012
Quote:
Originally Posted by DrSlett
Доброго времени суток.
Все знают функцию ShowPlayerDialog. Но бывают такие моменты, когда необходимо " скрыть" диалог, решение очень простое!
Добавьте в вашем коде:
PHP Code:
#define HidePlayerDialog(%0) ShowPlayerDialog(%0, -1, 0, "", "", "", "")
Готово!
Использование: HidePlayerDialog(playerid);
Автор: DrSlett
|
Это типо для тех кто не умеет/не хочет читать документацию?
Re: HidePlayerDialog -
DrSlett - 20.10.2012
Quote:
Originally Posted by eakwarp
Это типо для тех кто не умеет/не хочет читать документацию?
|
Собственно что вы взъерошились? Если хотите что-либо со мной обсудить пишите в личку и не засоряйте темы.
Re: HidePlayerDialog -
[Saint] - 20.10.2012
Quote:
Originally Posted by DrSlett
Доброго времени суток.
Все знают функцию ShowPlayerDialog. Но бывают такие моменты, когда необходимо " скрыть" диалог, решение очень простое!
Добавьте в вашем коде:
PHP Code:
#define HidePlayerDialog(%0) ShowPlayerDialog(%0, -1, 0, "", "", "", "")
Готово!
Использование: HidePlayerDialog(playerid);
Автор: DrSlett
|
http://forum.sa-mp.com/showpost.php?...4&postcount=97
Re: Коллекция функций / макросов -
xJester - 21.10.2012
А кто-нибудь пробовал? У меня не получилось почему-то (:
Re: Коллекция функций / макросов -
Stepashka - 21.10.2012
Quote:
Originally Posted by xJester
А кто-нибудь пробовал? У меня не получилось почему-то (:
|
Ну я пробовал, работает, только ID диалога не надо передавать, 0 там должен быть.
Re: Коллекция функций / макросов -
Stepashka - 05.11.2012
Жить надо проще.
pawn Код:
FlipString(string[]) {
if (string[0] == EOS) return false;
for (new i, letter, len = strlen(string); i < len; i++) {
if (len - i == i) break;
letter = string[i];
string[i] = string[len - i - 1];
string[len - i - 1] = letter;
}
return true;
}
Re: Коллекция функций / макросов -
raider19rus - 05.11.2012
Простая функция, записывающая строку с конца:
pawn Code:
stock ConverselyString(string[])
{
new data[256], len = strlen(string);
if(len < 2) return false;
for(new i; i <= len; i++)
{
if(i == 0) len--;
data[i] = string[len - i];
}
format(string, len + 2, data);
return true;
}
Результат:
Code:
Было: 1.. 2.. 3.. проверка
Стало: акреворп ..3 ..2 ..1
Re: Коллекция функций / макросов -
GameMan - 15.11.2012
Проверяет наличие игрока в кубе координат.
pawn Код:
stock IsPlayerInCube(playerid, Float:min_x, Float:min_y, Float:min_z, Float:max_x, Float:max_y, Float:max_z)
{
if(IsPlayerConnected(playerid))
{
new Float:px, Float:py, Float:pz;
GetPlayerPos(playerid, px, py, pz);
if(px >= min_x && px <= max_x && py >= min_y && py <= max_y && pz >= min_z && pz <= max_z) return 1;
}
return 0;
}