Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со строками, преобразования в числа 
:(
    Опции темы
Леночка
Дата 30.5.2005, 13:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Всем привет!!! У меня вопрос: smile есть ли в паскале такой оператор, либо метод, с помощью которого можно из строки символов выбрать к примеру числа, а затем изменив их тип , соответственно на real (integer), производить с ними действия? Зарание благодарен smile
  Вверх
Fedor
Дата 30.5.2005, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Модератор: Пожалуйста, один топик - один вопрос.
Добавлено @ 14:28
Леночка
Строку разделяешь обычным циклом - ищешь в строке, где встречаются цифры и их в отдельные строки. После этого к тем строкам применяешь процедуру Val
Код

val(s:string; a:integer; err: integer);



--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
Pakshin A. S.
Дата 30.5.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



А вот если нам в строке real встретился, то тут нужно немного хитрее поступить... smile


Но пока только немного длинный вариан... может сами короче напишете...

Вот демка:
Код

procedure ShowAllTch(s: string);
var
 i,c:integer;
 buf:integer;
 err: integer;
 kn: byte;
begin
 buf:=0;  c:=0;
 kn:=1;
 for i:=1 to Length(s) do
  if s[i] in ['0'..'1', ',']
   then
     if s[i] in ['0'..'1']
      then
       if kn = 1
        then
         buf:=buf + ord(s[i]) - ord('0')
        else
         c:=c + ord(si) - ord('0');
       else
        kn:=2;
   else
    begin
     kn:=1; 
     if buf <> 0
      then
       write(buf);
     if c <> 0
      then
       write(','c);
     writeln;
    end;
end;


Вроде что-то в этом духе... smile
PM   Вверх
Pakshin A. S.
Дата 30.5.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Вот... работаящая прога:
Код

uses WinCrt;

var
 s:string;
 buf1, buf2:integer;
 i:integer;
 kn: integer;
 b,f:boolean;

begin
 readln(s);
 buf1:=0;
 buf2:=0;
 kn:=1;
 f:=false;
 for i:=1 to Length(s) do
  begin
   b:=false;
   if s[i] in ['0'..'9']
    then
     begin
      if kn = 1
       then
        begin
         f:=true;
         buf1:=buf1*10 + ord(s[i]) - ord('0')
        end
       else
        buf2:=buf2*10 + ord(s[i]) - ord('0');
      b:=true;
     end;
   if s[i] = ','
    then
     begin
      if (kn = 1) and (f)
       then
        kn:=2
       else
        begin
         kn:=1;
         if buf1 <> 0
          then
           begin
            write(buf1);
            if buf2 <> 0
             then
              write(',', buf2);
            writeln;
           end;
         buf1:=0;
         f:=false;
         buf2:=0;
        end;
      b:=true;
     end;
   if not b
    then
     begin
      if buf1 <> 0
       then
        begin
         write(buf1);
         if buf2 <> 0
          then
           write(',', buf2);
         writeln
        end;
      kn:=1;
      buf1:=0;
      f:=false;
      buf2:=0;
     end;
  end;
 if buf1 <> 0
  then
   begin
    write(buf1);
    if buf2 <> 0
     then
      write(',', buf2);
    writeln;
   end;
end.


Справляется с тестом:
123 12,3 1,2,3 ,, ,1,2,3

Выдавая
123
12,3
1,2
3
1,2
3

P. S.
недостаток: длинная, поэтому кому не лень, оптимизируйте... smile

PM   Вверх
Romtek
Дата 30.5.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 7.12.2004
Где: Холон

Репутация: нет
Всего: 4



Цитата(Fedor)
val(s:string; a:integer; err: integer);
неправда.

Цитата(Pakshin)
А вот если нам в строке real встретился, то тут нужно немного хитрее поступить... smile

Цитата(Pakshin)
может сами короче напишете...


а можно и ничего не придумывать...
Цитата(Borland)
Val (procedure)
================
Converts a string value to its numeric representation.

Declaration:
procedure Val(S; var V; var Code: Integer);
where:
  S    string-type variable; must be a sequence of characters that
        form a signed whole number
  V    integer-type or real-type variable
  Code  variable of type Integer.

Target:
Windows, Real, Protected

Remarks:
Converts the string value (S) to its numeric representation, as if it were
read from a text file with Read.


Код

var Code: Integer;
    R: real;
    str: string[10];
begin
 str := '123.56';
 Val(str, R, Code);

 if code <> 0 then
   Writeln ('Error at position: ', Code)
 else
   Writeln ('Value = ', R : 10 : 3);
 Readln;
end.
smile
--------------------
Romiras HomeLab - материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и пр.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

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

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1748 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.