Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'размер строки'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • Информационный раздел
    • Новости портала
    • Техническая поддержка
    • Приватный форум
  • Программирование SA-MP/CR-MP
    • Вопросы по программированию
    • Ошибки
    • Готовые сервера
    • Дополнительные скрипты
    • Мануалы/Уроки
    • Модификации
    • Поиск
    • Архив Вопросов/Проблем/Ошибок
    • Файловый архив
  • Другое
    • Флейм
    • Другое

Поиск результатов в...

Поиск результатов, которые содержат...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Найдено: 1 результат

  1. Приветствую пользователей портала, просматривая темы я столкнулся с тем, что одно из самых часто используемых навыков в скриптинге (подсчёт строки) у некоторых или вообще не используется, или же используется с грубейшими ошибками. "Непорядок" - подумал я, и решил найти туториал о подсчёте строки, который я так и не нашёл . В итоге решил написать максимально подробный туториал о подсчёте строки, в котором освещу два способа подсчёта, каждый из которых будет иметь свои плюсы и минусы (о которых в конце). Начнём пожалуй! Способ первый (классический): Давайте напишу готовый код, который впоследствии разберу: new string[28], apple = 200; format(string, sizeof(string), "В ящике находится %d яблок", apple); SCM(playerid, 0xFFFFFFFF, string); Ну а теперь давайте разберёмся, каким образом я посчитал сам string 1) Считаем размер самой строки (которую форматируем), её размер 26 символов (26 ячеек) 2) Добавляем +1 ячейку для "нуль символа" - "\0" (NULL). 26+1 = 27 3) Вычитаем длину имеющихся в строке спецификаторов (%d, %s, %i и т.д.). У нас 1 спецификатор, длина которого 2 символа. 27-2 = 25 4) Прибавляем максимальную длину данных всех спецификаторов. Максимальное количество яблок в ящике - трёхзначное число. Выделяем 3 ячейки под это число. 25+3 = 28 Profit! Мы посчитали размер строки. Для закрепления давайте посчитаем размер строки с несколькими спецификаторами: new string[57], apple = 200, pear = 300; format(string, sizeof(string), "В первом ящике находится %d яблок, а во втором %d груш", apple); SCM(playerid, 0xFFFFFFFF, string); /* 1) Считаем размер исходной строки: В первом ящике находится %d яблок, а во втором %d груш - 54 символа 2) Добавляем нуль символ: 54+1 = 55 ячеек 3) Вычитаем длину имеющихся спецификаторов (их два, каждый длиной в 2 символа): 55 - (2*2) = 51 ячейка 4) Прибавляем максимальную длину спецификаторов (их два, у каждого максимальная длина - 3 символа): 51+(3*2) = 57 Размер строки - 57 ячеек. Давайте разберём его плюсы и минусы: Плюсы: • Привычность использования • Удобно считать при надобности посчитать несколько строк в одном участке кода • Новичкам проще понять данный метод Минусы: • Скорость подсчёта • При дальнейшем изменении данных сложнее пересчитать размер Способ второй (Автор: Daniel Cortez): Данный способ лично я применяю для подсчёта размера MySQL запросов (потом по плюсам и минусам поймёте почему) Давайте разберу готовый код: static const fmt_str[] = "Ваш id: %d"; new string[sizeof(fmt_str) + (-2 + 3)]; format(string, sizeof(string), fmt_str, playerid); SCM(playerid, 0xFFFFFFFF, string); Давайте разберёмся как идёт подсчёт: 1) Сама исходная строка считается автоматически посредством sizeof(fmt_str) 2) Нуль символ считается автоматически при использовании sizeof 3) Спецификаторы считаются по формуле и прибавляются к текущей строке Давайте разберём формулу: (-размер спецификатора+максимальная длина выводимых данных) Длина спецификатора у нас - 2 символа (2 ячейки), а максимальная длина ID игрока в игре - 3 символа (3 ячейки), из этого получаем формулу: (-2+3) Для наглядности и закрепления материала давайте разберу вариант с несколькими спецификаторами: static const fmt_str[] = "Ваш id: %d, ваш IP: %s"; new string[sizeof(fmt_str) + (-2 + 3) + (-2 + 16)], ip[16]; GetPlayerIp(playerid, ip, sizeof(ip)); format(string, sizeof(string), fmt_str, playerid, ip); SCM(playerid, 0xFFFFFFFF, string); /* Размер самой строки посчитан автоматически, нам требуется посчитать лишь размер спецификаторов ID мы уже считали в предыдущем примере IP посчитан также, изначальная длина спецификатора + максимальная длина выводимых данных. Максимальная длина IP - 16 символов В итоге получаем формулу: исходная строка (-2 + 3) + (-2 + 16) */ Давайте разберём его плюсы и минусы: Плюсы: • Можно легко изменить размер строки при последующем изменении данных (нужно лишь поменять исходную строку и дополнить формулу) • Скорость подсчёта Минусы: • Неудобство создания в местах кода, где необходимо несколько раз изменять строку • Громоздкая конструкция кода (я советую делать готовую заготовку и вставлять её) Вывод: Каждый из способов удобен и не удобен в конкретных ситуациях. Лично я использую первый способ везде кроме MySQL запросов. Какой использовать способ вам - решать только вам . Спасибо за внимание! Автор: LeonYT
×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.