|
|
|
| Здраствуйте!
Имеется строка вида (знак)(число)(знак)число) и так далее нужно посчитать сумму.
Я сделал это следующим способом
<?php
$sum=0;
if (!preg_match("/\A[+-][0-9]/",$_POST['text'],$error))die("Строка не соответствует условию");
preg_match_all("/[+][0-9]+/", $_POST['text'], $chisla_p);//цыфры с плюсом
$chisla_p=implode($chisla_p[0]);
preg_match_all("/[0-9]+/",$chisla_p,$chisla_p);//положительные цыфры
preg_match_all("/[-][0-9]+/",$_POST['text'], $chisla_o); //тоже самое с отрицательными
$chisla_o=implode($chisla_o[0]);
preg_match_all("/[0-9]+/", $chisla_o,$chisla_o);
for ($i=0;$i<count($chisla_p[0]);$i++){//прибовляем положительные
$sum+=$chisla_p[0][$i];
}
for ($i=0;$i<count($chisla_o[0]);$i++){//отнимаем отрицательные
$sum-=$chisla_o[0][$i];
}
echo "Сумма равна ".$sum;
?>
|
Мне кажется что это далеко не правильный алгоритм. Может кто подскажет правильный? | |
|
|
|
|
|
|
|
для: vidok
(14.03.2008 в 09:44)
| | Строка вида: (знак)(число)(знак)число)
(знак) всё время одинаковая? Если да, то можнос делать так:
<?
$sum = 0;
$exp = explode("(знак)", $_POST['text']);
for($i=0;$i>count($exp)$i++)
{
$sum += $exp[$i];
}
echo $sum;
?>
|
| |
|
|
|
|
|
|
|
для: DEM
(14.03.2008 в 13:48)
| | А можно ещё проще, через array_sum. | |
|
|
|
|
автор: Wunderbar (14.03.2008 в 15:43) |
|
|
для: DEM
(14.03.2008 в 13:48)
| | да понятно, что '(знак)' будет не один и тот же.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: vidok
(14.03.2008 в 09:44)
| | В чем была изначально задача? Откуда берутся эти строки, кажется что вы просто изначально делаете неверно, поэтому и появляется непонятно что. | |
|
|
|
|
|
|
|
для: mihdan
(14.03.2008 в 16:57)
| | Пользователь вводит строку выше описанного вида. Знаки могут быть разные а точнее + или -. Скрипт должен посчитать сумму из этих чисел учитывая знаки | |
|
|
|
|
|
|
|
для: vidok
(15.03.2008 в 02:08)
| | а eval() почему не хотите? | |
|
|
|
|
|
|
|
для: Lstasss
(15.03.2008 в 02:41)
| | действительно | |
|
|
|
|
|
|
|
для: vidok
(14.03.2008 в 09:44)
| | Вы тупо хотите калькулятор? Тогда и вправду eval(), ток естественно нужно проверить сначала пользовательский ввод /[0-9\+\-]/si | |
|
|
|
|
автор: Wunderbar (16.03.2008 в 20:11) |
|
|
для: mihdan
(16.03.2008 в 19:55)
| | > /[0-9\+\-]/si
Границы не указаны, "s" не нужно.
[поправлено модератором] | |
|
|
|