Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сумма строки состоящей из знаков и цифр
 
 автор: vidok   (14.03.2008 в 09:44)   письмо автору
 
 

Здраствуйте!
Имеется строка вида (знак)(число)(знак)число) и так далее нужно посчитать сумму.
Я сделал это следующим способом

<?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;
?>

Мне кажется что это далеко не правильный алгоритм. Может кто подскажет правильный?

   
 
 автор: DEM   (14.03.2008 в 13:48)   письмо автору
 
   для: vidok   (14.03.2008 в 09:44)
 

Строка вида: (знак)(число)(знак)число)
(знак) всё время одинаковая? Если да, то можнос делать так:


<?
$sum 
0;
$exp explode("(знак)"$_POST['text']);
for(
$i=0;$i>count($exp)$i++)
{
$sum += $exp[$i];
}
echo 
$sum;

?>

   
 
 автор: Nemezis   (14.03.2008 в 14:57)   письмо автору
 
   для: DEM   (14.03.2008 в 13:48)
 

А можно ещё проще, через array_sum.

   
 
 автор: Wunderbar   (14.03.2008 в 15:43)
 
   для: DEM   (14.03.2008 в 13:48)
 

да понятно, что '(знак)' будет не один и тот же.

[поправлено модератором]

   
 
 автор: mihdan   (14.03.2008 в 16:57)   письмо автору
 
   для: vidok   (14.03.2008 в 09:44)
 

В чем была изначально задача? Откуда берутся эти строки, кажется что вы просто изначально делаете неверно, поэтому и появляется непонятно что.

   
 
 автор: vidok   (15.03.2008 в 02:08)   письмо автору
 
   для: mihdan   (14.03.2008 в 16:57)
 

Пользователь вводит строку выше описанного вида. Знаки могут быть разные а точнее + или -. Скрипт должен посчитать сумму из этих чисел учитывая знаки

   
 
 автор: Lstasss   (15.03.2008 в 02:41)   письмо автору
 
   для: vidok   (15.03.2008 в 02:08)
 

а eval() почему не хотите?

   
 
 автор: Gemorroj   (15.03.2008 в 09:06)   письмо автору
 
   для: Lstasss   (15.03.2008 в 02:41)
 

действительно

   
 
 автор: mihdan   (16.03.2008 в 19:55)   письмо автору
 
   для: 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" не нужно.

[поправлено модератором]

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования