Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5

Тема: GetNums

  1. #1
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    GetNums

    Описание:
    Работая над строкой, функция игнорирует все символы, кроме символов цифр. Результатом работы функции является целочисленное строковое значение. В случае, если строка не имеет цифр функция вернет ноль.

    Функция:
    PHP код:
    stock GetNums(const src[], dest[], const size sizeof dest)
    {
        new 
    dest_size size 1result;
        for (new 
    = -10_char 0; (_char src[++i]);)
        {
            if (
    '0' <= _char <= '9')
            {
                
    dest[j++] = _char;
                
    result result 10 _char '0';
                if (
    == dest_size)
                {
                    
    dest[j] = '\0';
                    break;
                }
            }
        }
        return 
    result;

    Параметры:
    PHP код:
    (const src[], dest[], const size sizeof dest
    src[] - исходная строка для обработки.
    dest[] - буфер, куда записывается строковый аналог возвращаемого значения.
    size - число ячеек для обработки.

    Пример:
    PHP код:
    new str[5];
    printf("%d\n%s"GetNums("ст123рока4"str), str);
    // функция вернет 1234
    // массив str[] получит значение "1234" 
    Автор: Anton Styazhkin

    Специально для Pro-Pawn.ru
    Копирование данной статьи на других ресурсах без разрешения автора запрещено.
    Последний раз редактировалось Desulaid; 23.07.2016 в 12:36. Причина: вариант VVWVV

  2. Пользователь сказал cпасибо:
    BadPawn (22.07.2016)
  3. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    size предназначен для buff, но работает для string.
    То есть эта функция не сработает тогда, когда должна:
    PHP код:
    new str[5]; // 5 ячеек достаточно для передаваемого числа
    printf("%d\n%s"GetNums("ст123рока4"str), str); // в результате получим 123, а не 1234 
    Ещё функция сработает некорректно, если в передаваемом массиве уже что-то лежит.
    Да и функции лучше со stock объявлять, чтобы не было предупреждений о не использовании.

    Вот, переписал:
    PHP код:
    stock GetNums(const string[], buff[], const size sizeof(buff))
    {
        new
            
    i,
            
    j,
            
    symbol;

        while ((
    symbol string[i]) != '\0') {
            if (
    '0' <= symbol <= '9') {
                
    buff[j] = symbol;
                
    j++;

                if (
    == size 1) {
                    break;
                }
            }

            
    i++;
        }

        
    buff[j] = '\0';
        return 
    strval(buff);


  4. #3
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    ziggi, спасибо .

    Забыл про существование минуса. Добавил его "видимость". Если в массиве записалось "1-2йцу3", то это проблемы записавшего такую чушь (мне лень переделывать и нет).

  5. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Anton Styazhkin Посмотреть сообщение
    Забыл про существование минуса. Добавил его "видимость". Если в массиве записалось "1-2йцу3", то это проблемы записавшего такую чушь (мне лень переделывать и нет).
    Ты этим минусов всё условие испортил, теперь оно всегда истинно. Да и скобку нужную удалил.

  6. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Ты этим минусов всё условие испортил, теперь оно всегда истинно. Да и скобку нужную удалил.
    Окей .

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •