Помощь - Поиск - Пользователи - Календарь
Полная версия: Удалить повторяющиеся символы из массива.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
LoveУшка
Вот задачка, чувствую, что элементарная, но с паскалем у меня война((((

Напечатать заданный текст длиной от 1 до 100 символов, удалив из него повторные вхождения каждого символа.

Заранее спасибо. Если можно, побыстрее)))
volvo

var
 s: string;
 i: byte;

 chars: set of char;
begin
 writeln('Введите строку:>');
 readln(s);

 if length(s) > 100 then
   begin
     writeln( 'Строка длиной более 100 символов...' );
     exit
   end;

 chars := [];
 for i := 1 to length(s) do
   if not (s[i] in chars) then
     begin
       write(s[i]);
       chars := chars + [ s[i] ];
     end;

end.

GoodWind
volvo, молодец ! Слово в слово то, что я собирался постить.
respect
LoveУшка
Большое спасибо! Спасибо! Спасибо! Даже не знаю как отблагодарить)))..
А если совсем не сложно(извините, я знаю что я нагалая) эту же задачу с помощью массива)))) Но это если совсем не сложно! Заранее спасибо)))
volvo
Вот... Но она менее красива, чем первая... smile.gif


var
 s: string;
 i, j: byte;

 chars: array[1 .. 100] of char;
 wasFound: Boolean;
 arrLen: byte;
begin
 writeln('Введите строку:>');
 readln(s);

 if length(s) > 100 then
   begin
     writeln( 'Строка длиной более 100 символов...' );
     exit
   end;

 arrLen := 0;
 for i := 1 to length(s) do
   begin
     wasFound := False;
     for j := 1 to arrLen Do
       if chars[j] = s[i] then
         begin
           wasFound := True;
           break;
         end;
     if not wasFound then
       begin
         write(s[i]);
         inc(arrLen);
         chars[arrLen] := s[i]
       end;
   end;

end.

LoveУшка
Ну а что делать, не все что красивое нужно((((.. Спасибо! ( Я повторяюсь))))
Даж не знаю , как на самом деле отблагодарить))))...
Я здесь первый раз, такая быстрая эффективная помощь! СУПЕР! нет слов - одни эмоции!))))
Самый лучший форум в данной категории, который я когда-либо видела!
Еще раз спасибо!!!
Altair
хех.
Shaddix
Люди тут добрыеsmile.gif Это я уже давно понял. Всем помогают rolleyes.gif
Первый раз такое в и-нете встречаю...
Ш. Нелль
А вот может быть такая же задача, но используя только массивы, т.е. без строк.. оч интересно rolleyes.gif
volvo
Что значит без строк? имеется в виду отсутствие строки s в которую осуществляется ввод? Так можно организовать ввод сразу в массив chars ... :yes:
Ш. Нелль
Да... то есть строка вобще не используется... Массив вводится с клавы, выводится тоже массивом, и действия ссответстенно делаются с массивом.. Т.е. наскоко я понимаю, используем один рипит, внутри цикл, ну флаг обмена естественно, и наверно нужен иф... Хмм... вот думаю как бы все эти мудрые мысли скомпоновать....
volvo
Тогда можно сделать так:

Код

uses crt;
var
 i: byte;

 chars: array[1 .. 100] of char;
 ch: char; total, iChar: integer;
 found: boolean;
begin
 writeln('string:>');

 iChar := 1;
 repeat
   ch := readkey; inc(total);
   if total > 100 then
     begin
       writeln(#10#13'Строка длиной более 100 символов...'); exit
     end;

   if ch = #13 then break;

   write(ch);
   found := false;
   for i := 1 to iChar do
     if chars[i] = ch then
       begin
         found := true; break;
       end;
   if not found then
     begin
       chars[iChar] := ch; inc(iChar);
     end;
 until false;
 writeln;

 for i := 1 to pred(iChar) do
   write(chars[i]);
 writeln;
end.
Ш. Нелль
Спасибо.. А вот что значит это #10#13
writeln(#10#13'Строка длиной более 100 символов...'); 


и еще объясните человеку...что такое Inc(); нигде найти не могу..
Altair
#10#13

перевыод курсора на новую строку

Inc();

увеличение чего-либо стоящего в скобках на n или на 1 если n не указанно
Ш.Нелль
А вот почему я не могла найти увеление номера.. unsure.gif мдя... бывет=)
GoodWind
а уменьшение - dec(n);
zx1024
У inc и dec (иногда) может быть второй аргумент. И он может быть отрицательным. Поэтому сказать однозначно, что inc - увеличт переменую, а dec её уменьшит нельзя.
GoodWind
Цитата
Поэтому сказать однозначно, что inc - увеличт переменую, а dec её уменьшит нельзя.

просто inc - сокращение от increment (повышение), а dec - от decrement (понижение).
Atos
Цитата(zx1024 @ 23.10.04 0:01)
У inc и dec (иногда) может быть второй аргумент. И он может быть отрицательным.

Да... Дедушка Вирт&парни из Borland, наверное оставили такой артефакт специально для маньяков-программеров, как один из способов запутать того, кто бы попытался разобраться в из коде ;) {Плотоядно облизываясь} Надо бы попробовать B) :p1: :D
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.