Коллекция функций / макросов

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;
}
Понятно.
Reply

А почему просто нельзя strlen ввести?
Reply

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
А почему просто нельзя strlen ввести?
Потому что функция считает не длину строки, а количество вхождений определенного символа в строку.
Reply

Количество вхождений = количеству символов. Сам попробуй.
Reply

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Количество вхождений = количеству символов. Сам попробуй.
длина строки 52 символа, но в неё входит 8 символов "о".
Начни гулять на свежем воздухе, а то я гляжу мозг начинает атрофироваться!
Reply

Окей. Видимо ты не понял, что нигде не указывается искомый символ.

Длина строки - 26 символов (не включая завершающий псведо-ноль), число вхождений "o" - 9 раз.
pawn Код:
new stepashka[] = "ololotrolololojavoditelnlo";
printf("%d", strlen(stepashka));
Исходя из твоих "гениальных" сообщений, мы должны получить 9, но получаем 26 . Завязывай гулять на свежем воздухе, а то мозг уже атрофировался. Это по поводу вопроса о strlen.

А по поводу вопроса о функции, которую опубликовал чел - надо описание адекватное составлять, тогда и путаницы не будет. Я прочитал описание и ответил, код не смотрел.

И я бы так тогда уж сделал:
pawn Код:
stock SymbolCount(string[], symbol)
{
    for(new i = 0, count; string[i] != EOS; i++)
    {
        if(string[i] == symbol) count += 1;
    }
    return count;
}
Reply

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Я прочитал описание и ответил, код не смотрел.
Не стать тебе программистом.
Reply

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Не стать тебе программистом.
Поздно об этом думать.

Quote:
Originally Posted by ru.raider
Посмотреть сообщение
Ошибка, кстати.
Какая?
Reply

Так не проще не?
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,"число","числа","чисел"));
Reply

Quote:
Originally Posted by -Stranger-
View Post
Так не проще не?
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,"число","числа","чисел"));
Намного проще, огромное спасибо И твоя функция (или не твоя) в 2 раза быстрее, чем GetNeededWord
Тест в 1 000 000 интераций
[26.09.2012 | 20:05:05] GetNeededWord - 494
[26.09.2012 | 20:05:05] NFORMAT - 280
Reply

GameMan, ну вообще-то всё уже давно просчитано, написано и выложено: http://translate.sourceforge.net/wiki/l10n/pluralforms
Reply

Доброго времени суток.

Все знают функцию ShowPlayerDialog. Но бывают такие моменты, когда необходимо "скрыть" диалог, решение очень простое!

Добавьте в вашем коде:

PHP Code:
#define HidePlayerDialog(%0) ShowPlayerDialog(%0, -1, 0, "", "", "", "") 
Готово!

Использование: HidePlayerDialog(playerid);

Автор: DrSlett
Reply

Quote:
Originally Posted by DrSlett
View Post
Доброго времени суток.

Все знают функцию ShowPlayerDialog. Но бывают такие моменты, когда необходимо "скрыть" диалог, решение очень простое!

Добавьте в вашем коде:

PHP Code:
#define HidePlayerDialog(%0) ShowPlayerDialog(%0, -1, 0, "", "", "", "") 
Готово!

Использование: HidePlayerDialog(playerid);

Автор: DrSlett
Это типо для тех кто не умеет/не хочет читать документацию?
Reply

Quote:
Originally Posted by eakwarp
View Post
Это типо для тех кто не умеет/не хочет читать документацию?
Собственно что вы взъерошились? Если хотите что-либо со мной обсудить пишите в личку и не засоряйте темы.
Reply

Quote:
Originally Posted by DrSlett
View Post
Доброго времени суток.

Все знают функцию ShowPlayerDialog. Но бывают такие моменты, когда необходимо "скрыть" диалог, решение очень простое!

Добавьте в вашем коде:

PHP Code:
#define HidePlayerDialog(%0) ShowPlayerDialog(%0, -1, 0, "", "", "", "") 
Готово!

Использование: HidePlayerDialog(playerid);

Автор: DrSlett
http://forum.sa-mp.com/showpost.php?...4&postcount=97
Reply

А кто-нибудь пробовал? У меня не получилось почему-то (:
Reply

Quote:
Originally Posted by xJester
View Post
А кто-нибудь пробовал? У меня не получилось почему-то (:
Ну я пробовал, работает, только ID диалога не надо передавать, 0 там должен быть.
Reply

Жить надо проще.
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;
}
Reply

Простая функция, записывающая строку с конца:

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
Reply

Проверяет наличие игрока в кубе координат.
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;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)