Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Реализация на PHP

63K
26 февраля 2011 года
Alexcnt
12 / / 26.02.2011
написал код на с++, помогите перевести на PHP

/*
Данная функция возвращает true при выполнении следующих условий:
1)длина строки равна 15;
2)первая плюс седьмая цифра == двенадцатая цифра минус 5.
В остальных случаях возвращаемое значение - false

Вход: строка

Выход: false/true

*/




bool my_function ()
{
vector<unsigned char> my_str; //массив символов
unsigned char symbol;
unsigned int counter = 0; //счётчик символов

while (cin >> symbol) //пока в потоке ввода есть символы
{
if(isdigit(symbol))
my_str.push_back(symbol); //в массив записываем только цифры
++counter; //инкрементируем счетчик цифр
}

if (counter != true_length)
return false ;

try
{
return (my_str[0]+my_str[6]-my_str[11]+5 == '0');
}
catch(exception)
{
return false;
}

}


Спасибо большое!
278
26 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
Код:
function my_function() {
   $my_str = array();
   $symbol = '';

   $fp = fopen('php://stdin', 'r');
   if ($fp) {
     while (!feof($fp))
      if (is_numeric($symbol = fread($fp, 1)))
        $my_str[] = $symbol;
   } else
     return false;

   fclose($fp);

   if (count($my_str) != $true_length)
     return false;

   return ($my_str[0] + $my_str[6] - $my_str[11] + 5 == 0);
}


Кстати, на C++ тоже можно было бы красивее написать. :) В частности, там counter не нужен, достаточно написать my_str.size().
63K
26 февраля 2011 года
Alexcnt
12 / / 26.02.2011
Ого! Спасибо галактическое, можете немного код на php подправить как у меня написано было,просто counter тут необходим, так как мы его используем для того ,чтобы подсчитать количество первоначально введенных символов , и если их уже не 15 - то мы возвращаем false, именновведенных, а не тех, которые мы уже записали в массив цифр.Спасибо еще раз!
63K
26 февраля 2011 года
Alexcnt
12 / / 26.02.2011
Код:
function my_function() {
   $my_str = array();
   $symbol = '';
   $counter = 1;

   $fp = fopen('php://stdin', 'r');

   if ($fp)
   {
       while (!feof($fp))

       if (is_numeric($symbol = fread($fp, 1)))
       $my_str[] = $symbol;
       ++$counter;
   }

   return false;
   
   fclose($fp);

    if ($counter != $true_length)
    return false;

   return ($my_str[0] + $my_str[6] - $my_str[11] + 5 == 0);

}



вот так пойдет?
278
26 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: Alexcnt
Код:
function my_function() {
   $my_str = array();
   $symbol = '';
   $counter = 1;

   $fp = fopen('php://stdin', 'r');

   if ($fp)
   {
       while (!feof($fp))

       if (is_numeric($symbol = fread($fp, 1)))
       $my_str[] = $symbol;
       ++$counter;
   }

   return false;
   
   fclose($fp);

    if ($counter != $true_length)
    return false;

   return ($my_str[0] + $my_str[6] - $my_str[11] + 5 == 0);

}



вот так пойдет?



Почти, только изначально

 
Код:
$counter = 0;
63K
26 февраля 2011 года
Alexcnt
12 / / 26.02.2011
Код:
<?php

    function my_function() {

    define ("true_length", 15);
    $my_str = array();
    $symbol = '';
    $counter = 0;

    $fp = fopen('php://stdin', 'r');

    if ($fp)
    {
        while (!feof($fp))
        {
        if (is_numeric($symbol = fread($fp, 1)))
            $my_str[] = $symbol;
        ++$counter;
        }
    }
    else
        return false;

    if ($counter != true_length)
    {
    return false;
    fclose($fp);
    }

    return ($my_str[0] + $my_str[6] - $my_str[11] + 5 == 0);
    fclose($fp);
}

?>



Вот так окончательно напишу!
Я там добавил после каждого return - fclose($fp) праильно?
и еще ...в строчке return ($my_str[0] + $my_str[6] - $my_str[11] + 5 == 0); в конц ноль или '0' символ нуля?
Спасибо!
278
26 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
Я прошу прощения, немного невнимательно прочел ваше последнее сообщение; все-таки, самый правильный вариант был тот, который я написал изначально, только с небольшими коррективами. Привожу окончательный вариант:

Код:
function my_function() {
   $my_str = array();
   $symbol = '';
   $counter = 0;

   $fp = fopen('php://stdin', 'r');
   if ($fp) {
     while (!feof($fp)) {
      if (is_numeric($symbol = fread($fp, 1)))
        $my_str[] = $symbol;
      $counter++;
     }
   } else
     return false;

   fclose($fp);

   if ($counter != $true_length)
     return false;

   if (count($my_str) < 11)
     return false;

   return (intval($my_str[0]) + intval($my_str[6]) - intval($my_str[11]) + 5 == 0);
}


Теперь пару слов по поводу небольших недостатков в вашей версии.
1.
Лучше писать
 
Код:
fclose($fp);

сразу после завершения работы с файлом, чтобы потом не таскать за собой повсюду эту операцию.

2. Все, что написано после инструкции
 
Код:
return;

, уже не выполняется, поэтому если закрываете файл, то это нужно делать ДО нее.

3.
[QUOTE=Alexcnt]
в строчке return ($my_str[0] + $my_str[6] - $my_str[11] + 5 == 0); в конц ноль или '0' символ нуля?
[/QUOTE]
Обратите внимание на мой последний вариант; я привел все к типу int и сравнил с числовым нулем.
63K
26 февраля 2011 года
Alexcnt
12 / / 26.02.2011
Большое спасибо, надеюсь это функция возвратит 0 если входня строка не содержит цифр (или еще какие-либо исключения). Пока разбираюсь со всем необходимым для работы с php и не запускал программу.Надеюсь она работает)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог