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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2015, 12:37   #1
tema2434
Пользователь
 
Регистрация: 16.11.2013
Сообщений: 12
По умолчанию delphi сведение одинаковых символов в строке

Нужно свести подобные символы в строке, если какой-то символа встречается 3 раза, удалить все его вхождения, строк состоит из подстрок которые разделяются '_' таким символом, моя наработка
Код:
var
    s1,s2,s3: string;
    i: byte;
    n,k:integer;
begin
    read(s1);
    for i:=1 to length(s1) do begin
      if s1[i]=s1[i+1] then
        n:=n+1;
      if n=3 then
        delete(s1,i,i);
    end;
    s2 := '';
    for i:=1 to length(s1) do begin
        s3 := copy(s1,i,1);
        if pos(s3,s2) = 0 then
            s2 := s2 + s3
    end;
    writeln(s2);
readln;
readln
Но выдает не совсем то, вот пример входная строка I_LOVVVVWWXXXWE_YOU вывод I_LOVE_YOU что мне в своем коде исправить, чтобы работало верно?
tema2434 вне форума Ответить с цитированием
Старый 12.12.2015, 15:34   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Ересь получилась, но... разбирайся, может на какую-то идею натолкнет
Код:
Program HelloWorld(output);
var s:string; 
    a:array[1..100] of string;
    i,j,k,m,count:integer;
begin
  s := 'I_LOVVVVWWXXXWE_YOU';
  count:=1;
 i:=1; while (i<=length(s)) do begin
   if s[i]='_' then begin inc(count);inc(i);end;
   a[count]:=a[count]+s[i];
   inc(i);
end;
for i:=1 to count do write(a[i],' ');
writeln;

for i:=1 to count do
begin
  j:=1;
  while j<=length(a[i]) do
   begin
     m:=0;
     s:=a[i][j];m:=0;
     for k:=j to length(a[i]) do if s=a[i][k] then inc(m);
     if m>=3 then 
      begin
       m:=m div 3 * 3;writeln('m ',m);
       k:=1;
       while k<=length(a[i]) do
        if (a[i][k]=s) and (m>0)  then 
         begin 
          dec(m);
          delete(a[i],k,1);
         end
        else inc(k);
      end
    else 
    inc(j);
   end;
end;

for i:=1 to count-1 do
write(a[i],'_');writeln(a[count]);
end.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функцию, которая принимает в качестве параметра строку и символ и вычисляет количество таких символов в строке (Delphi) Loqwer78rus Помощь студентам 10 06.05.2014 10:52
азаработать программу Подсчета числа символов указанного типа в любой заданной строке символов . slava5170 Общие вопросы C/C++ 4 03.11.2013 02:18
функция для перемещения символов в строке delphi SonicBob Помощь студентам 1 20.12.2011 10:10
Количество одинаковых слов в строке. Delphi topside Помощь студентам 10 30.10.2011 23:05
Сведение одинаковых баз (форм) IFRSoff Microsoft Office Access 4 06.04.2009 14:14