Помощь - Поиск - Пользователи - Календарь
Полная версия: Удалить повторяющиеся символы из массива.
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.