Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 26.06.2010, 09:51   #1
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию Символы в строке загнать в переменные

Решаю такую проблему. Пользователь вводит строку такого типа:
2x^2-2x+1 Нужно в a загнать 2 в b -2 в с +1.
Нашёл a вот так:
Код:
s:=edit1.Text;
edit1.Clear;
for i:=1 to length(s) do
begin
if (s[i]='x') then begin
for j:=1 to i-1 do
a:=a+s[j];
end;
Нашёл с вот так:
Код:
if i=length(s) then
begin
c:=strtoint(s[i-1]+s[i]);
//последний символ из строки + предпоследний
end;
Вот общий код:
Код:
s:=edit1.Text;
edit1.Clear;
for i:=1 to length(s) do
begin
if (s[i]='x') then begin
for j:=1 to i-1 do
a:=a+s[j];
end;
if i=length(s) then
begin
c:=strtoint(s[i-1]+s[i]);
//последний символ из строки + предпоследний
end;
end;
Как найти b?
cheef вне форума Ответить с цитированием
Старый 26.06.2010, 10:35   #2
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

Строка будет только одна, или будут и другие, отлич. от этой?
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 26.06.2010, 11:00   #3
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию

Отличные например коэффициенты двузначные, трехзначные и тп.
cheef вне форума Ответить с цитированием
Старый 26.06.2010, 13:26   #4
apromix
PHP, Delphi
Форумчанин
 
Аватар для apromix
 
Регистрация: 07.05.2008
Сообщений: 388
По умолчанию

А почему бы Вам для этих целей не использовать скриптовый язык, например, Lua?
Мыши плакали, кололись, но продолжали жрать кактус...
мои проекты
apromix вне форума Ответить с цитированием
Старый 26.06.2010, 14:57   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

вот пример парсинга....
работает с вещественными числами.
нормально парсит подобные строки:
200x^2 - 232.5x + 12.25
Код:
procedure TForm1.Button2Click(Sender: TObject);
var s : string;
  i : integer;
  a, b, c : extended;
begin
  s := trim(UpperCase(Edit2.Text));

  // удалим в строке ВСЕ пробелы
  while Pos(' ',s)>0 do Delete(s,Pos(' ',s),1);

  a := 0;
  b := 0;
  c := 0;

  if Pos('X',s)=0 then begin
    Application.MessageBox('В строке нет X - о каких коэффициентах может идти речь?!!',
        'Ошибка', MB_ICONERROR or MB_OK);
    Exit;
  end;

  a := StrToFloat(Trim(copy(s,1,Pos('X^2',s)-1)));
  Delete(s,1,Pos('X^2',s)+2);

  // дальше в строке ищем первое число со знаком
  i:=1;
  while (i<=length(s))
         and Not (s[i] in ['0'..'9', '+', '-']) do inc(i);

  if i>Length(s) then Exit; {в строке нет больше чисел}
  Delete(s, 1, i-1);

  if Pos('X',s)=0 then begin
    //  в строке нет B - только С
    c := StrToFloat(Trim(s))
  end
  else begin
    b := StrToFloat(Trim(copy(s,1,Pos('X',s)-1)));
    Delete(s,1,Pos('X',s));
    c := StrToFloat(Trim(s));
  end;

  LabelA.Caption := FloatToStr(a);
  LabelB.Caption := FloatToStr(B);
  LabelC.Caption := FloatToStr(C);
end;
Пара важных примечаний.
Для разделителя целой/дробной части должен применяться системный разделитель. (точка или запятая, зависит от локальных настроек системы).

Если в строчке будут посторонние символы - вылезет Exception!
(с этим можно бороться анализируя строчку, или заключив StrToFloat в Try.. except ... )

Последний раз редактировалось Serge_Bliznykov; 26.06.2010 в 15:00.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.06.2010, 15:49   #6
cheef
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 205
По умолчанию

Спасибо, буду в коде разбираться.
cheef вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
убрать null (нуль) символы в строке Kib Общие вопросы Delphi 7 25.06.2010 13:22
Программа работает, но на выходе выдаёт в строке никому не нужные символы anybkarnak Общие вопросы C/C++ 1 04.03.2010 08:07
удалить в строке все одинаковые символы Михаил70 Помощь студентам 5 09.09.2009 17:35
как удалить лишнеие символы в строке, и ограничить длину строки MixanMM Общие вопросы Delphi 3 11.06.2009 06:03


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS