Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 01:22   #1
Vergilian
 
Регистрация: 26.09.2011
Сообщений: 3
Печаль деление строки на элементы

Доброго времени суток.

Появилась проблема в написании программы: даны 4 массива, 3 из них стринг типа и 1 integer (фио и дата рождения).
С клавиатуры вводится строка стринг типа (а,б,с,1 к примеру) и программа должна отделаться элементы по запятым и вносить их в свой массив.
1-я проблема не знаю как цифры со стринг строки занести в инт массив.

2-я написанный код зависает на вечном цикле (наверное)

Код:
uses crt;
type mass = array[1..35] of string; massint = array[1..35] of integer;
var a,b,c:mass; d:massint; r:string;
procedure vvod ( n:integer);
var i,l:integer;
begin
for i:=1 to n do begin
read (r);
r:=r+',';
l:=1;
repeat
if (copy(r,l,1)) = ',' then begin
a[i]:=(copy(r,1,l-1));
l:=l+1;
end;
until (copy(r,l-1,1) = ',');
delete(r,1,L-1);
l:=1;
repeat
if (copy(r,l,1)) = ',' then begin
b[i]:=(copy(r,1,l-1));
l:=l+1;
end;
until (copy(r,l-1,1) = ',');
delete(r,1,L-1);
l:=1;
repeat
if (copy(r,l,1)) = ',' then begin
c[i]:=(copy(r,1,l-1));
l:=l+1;
end;
until (copy(r,l-1,1) = ',');
delete(r,1,L-1);
end;
end;
Буду благодарен за помощь!
Vergilian вне форума Ответить с цитированием
Старый 29.09.2011, 07:01   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Для перевода строки в число есть процедура Val.
А поиск разделителей рекомендую делать не через цикл, а функцией Pos - тогда, думаю, и зависания пропадут.
Есть у тебя справочник по функциям?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 29.09.2011, 07:44   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а функцией Pos - тогда, думаю, и зависания пропадут.
Одна только проблемка - Pos ищет только первое вхождение. Если у автора несколько разделителей в строке, то без цикла не обойтись.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2011, 08:10   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Одна только проблемка - Pos ищет только первое вхождение. Если у автора несколько разделителей в строке, то без цикла не обойтись.
Ты бы глянул в код-то )).
Автор тоже ищет только первое вхождение. Но потом удаляет найденное слово вместе с разделителем. Все путем )).
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 29.09.2011, 09:15   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ты бы глянул в код-то )).
Смотрел я код. Именно поэтому и хотел предложить вариант без POS.

Код:
uses crt;
type mass = array[1..35] of string; 
massint = array[1..35] of integer;
var a,b,c:mass; d:massint; r:string;

procedure vvod ( n:integer);
var i,l,k,o,p:integer;
 s:array[1..4] of string;
begin

for i:=1 to n do begin read (r);
 l:=1; 
 o:=1;
 while l<length(r) do begin k:=l; // В цикле пойдем по массиву
   while (l<length(r))and (r[l] in ['A'..'z','0'..'9','А'..'я']) do inc(l); // вычислим где очередной разделитель
   s[o]:=copy(r,k,l-k+1); inc(o); // скопируем все что было до него и перед предидущей
   while (l<length(r))and not (r[l] in ['A'..'z','0'..'9','А'..'я']) do inc(l);
 end;

end;
end;
ИМХО это получше чем смесь POS и DELETE.

P.S. Ты не подумай, я не против твоего предложения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2011, 09:44   #6
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
ИМХО это получше чем смесь POS и DELETE.
Это безусловно лучше (в смысле эффективнее), да и исходная строка сохраняется.
Кул )). Надеюсь, ТС оценит.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 29.09.2011, 18:37   #7
Vergilian
 
Регистрация: 26.09.2011
Сообщений: 3
По умолчанию

Спасибо, с val разобрался, попробую ваш вариант.
Vergilian вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить матрицу, элементы первой строки равны максимальному элементу; а второй строки - номеру (Делфи) Markss Помощь студентам 1 30.05.2011 23:15
Delphi. 1, если элементы к-й строки матрицы упорядочены по убыванию rager06 Помощь студентам 0 17.05.2011 17:06
если элементы k-й строки матрицы упорядочены по убыванию, иначе 0 nesss Помощь студентам 1 01.11.2010 15:41
Деление текст на строки. Lazio Помощь студентам 9 13.10.2009 19:44
деление строки Joy Паскаль, Turbo Pascal, PascalABC.NET 3 24.01.2009 16:14