Реализация на 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;
}
}
Спасибо большое!
Код:
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);
}
$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().
Ого! Спасибо галактическое, можете немного код на php подправить как у меня написано было,просто counter тут необходим, так как мы его используем для того ,чтобы подсчитать количество первоначально введенных символов , и если их уже не 15 - то мы возвращаем false, именновведенных, а не тех, которые мы уже записали в массив цифр.Спасибо еще раз!
Код:
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);
}
$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);
}
вот так пойдет?
Цитата: 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);
}
$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;
Код:
<?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);
}
?>
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' символ нуля?
Спасибо!
Код:
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);
}
$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 и сравнил с числовым нулем.
Большое спасибо, надеюсь это функция возвратит 0 если входня строка не содержит цифр (или еще какие-либо исключения). Пока разбираюсь со всем необходимым для работы с php и не запускал программу.Надеюсь она работает)