Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5

Замена одинаковых символов на n*2 штук

18.03.2014, 17:35. Показов 1526. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ выручайте.
задача:
дана строка. каждую подстроку длиной n>1, состоящую из одинаковых символов, заменить на подстроку из тех же символов в количестве 2*n штук.

ввод:
abccdefff

вывод:
abccccdeffffff

предполагаю, сравнение текущего и следующего символа как то так:
Pascal
1
2
3
4
5
i:= 1; 
    while i<=length(s)-1 do begin     {пока не конец строки}
      For j := i+1 to length(s) do 
          if s[j]<>s[i] then i:= i + 1     {переходим к следующей букве}
                          else  inc(i);           {если символы равны}
и с этой мертвой точки сдвинуться никак не могу. беда.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.03.2014, 17:35
Ответы с готовыми решениями:

Замена одинаковых символов в слове
Ввести фразу. Все последовательности одинаковых символов заменить на выражения N(C). Где N – количество последовательных одинаковых...

Замена подряд идущих одинаковых символов на заданный
Составить программу которая заменяет любое количество одинаковых символов, которые идут друг за другом подряд но такой же символ и цифру,...

Имеются две партии одинаковых изделий по 15 и 12 штук
В каждой партии одно изделие дефектно, остальные страндартны. Из наудачу выбранной партии извлечено изделие. Какова вероятность того, что...

14
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,451
19.03.2014, 02:47
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var s, r, w: string;
    i: integer;
begin
  writeln('Введите строку:');
  readln(s);
  if s[length(s)] = ' ' then s := s + '.' else s := s + ' ';
  r := s[1];
  w := '';
  for i := 2 to length(s) do
    begin
      if s[i] = r[1]
        then r := r + s[i]
        else begin
          w := w + r;
          if length(r) > 1 then w := w + r;
          r := s[i]
        end;
    end;
  writeln('Результат:');
  writeln(w);
  readln
end.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2014, 08:00
Лучший ответ Сообщение было отмечено kefirOFF как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
var s:string;
    i:byte;
begin
writeln('Введите строку с одинаковыми символами подряд');
read(s);
for i:=length(s) downto 1 do
if (s[i]=s[i-1])or((s[i]=s[i+1])and(s[i]<>s[i-1]))
then insert(s[i],s,i+1);
write(s)
end.
1
 Аватар для kitap
5 / 5 / 5
Регистрация: 13.03.2014
Сообщений: 46
19.03.2014, 10:26
шас через 3 мин отправлю нормальноу решение

Добавлено через 5 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Uses crt;
Var
   k : array [1..100] of string;
   s : string;
   i,c : integer;
begin
ReadLn(s);
s:=s+' ';
c:=1;
for i:=1 to length(s) do
                        begin
                        if s[i]=s[i+1] then begin k[c]:=k[c]+s[i]; end else
 begin k[c]:=k[c]+s[i]; inc(c); end;
                        end;
for i:=1 to c do
    if length(k[i])>1 then Write(k[i],k[i]) else write(k[i]);
end.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2014, 10:28
Цитата Сообщение от kitap Посмотреть сообщение
нормальноу решение
А выше не нормальноу?

Добавлено через 1 минуту
Какую-то хрень написал, и чего тебе надо?
0
 Аватар для kitap
5 / 5 / 5
Регистрация: 13.03.2014
Сообщений: 46
19.03.2014, 10:29
мое решение более легкое для новичка

Добавлено через 40 секунд
как хрен ты попробуй введи на паскале
0
19.03.2014, 10:31

Не по теме:

Надолго ты у нас не задержишься, я прослежу...

0
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
19.03.2014, 12:01  [ТС]
Народ всем огромное спасибо, что откликнулись.
я хоть и новичок, но решение Puporev эффективнее, и понятнее.
единственное. на free pascal все работает отлично, а вот в pascal abc "Ошибка. индекс находился вне границ массива".
разрешилось корректировкой цикла for
Pascal
1
for i := length(s) downto 2 do
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2014, 12:14
Странно, я писал в Авс и ошибки не было.

Добавлено через 2 минуты
В коротких строках string[255] есть нулевая ячейка, где хранится длина строки и обращение к s[1-1] не ошибка.

Добавлено через 3 минуты
Ты наверное запускал в ABC.net, там тип sbring другой, но это раздел просто АВС, если нужно было .net , то там и создавали бы тему

Добавлено через 5 минут
С учетом всех ограничений
Pascal
1
2
3
4
5
6
7
8
9
10
var s:string;
    i:byte;
begin
writeln('Введите строку с одинаковыми символами подряд');
read(s);
for i:=length(s) downto 1 do
if ((i>1)and(s[i]=s[i-1]))or((i<length(s))and(s[i]=s[i+1]))
then insert(s[i],s,i+1);
write(s)
end.
А это
Pascal
1
for i := length(s) downto 2 do
не верно
0
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 5
19.03.2014, 12:22  [ТС]
Вот теперь все понятно.
да. это мой косяк. поторопился. нужен был .net
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,451
19.03.2014, 12:24
Puporev, у меня в Дельфи 7 вылет за границы массива. Причём в двух местах:
Pascal
1
(s[i]=s[i-1])or((s[i]=s[i+1])
Если s[length(s)]<>s[length(s)-1], то попытка обращения к s[length(s)+1]. При i=1 тоже ошибка, ну не хотят дельфи к s[0] обращаться. И ещё в этом месте скрытая ошибка, проявляется в случае s[1]=char(length(s)).

Добавлено через 48 секунд

Не по теме:

А, уже исправлено.

0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2014, 12:29
В Делфи те же длинные строки что и в АВС.net.

Добавлено через 33 секунды
Я писал конкретно для простого АВС и отвяжитесь.
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,451
19.03.2014, 12:32
В моём случае нет.
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
у меня в Дельфи 7
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.03.2014, 12:56
У меня тоже Делфи 7, но строки длинные
http://www.delphibasics.ru/String.php

Добавлено через 4 минуты
А вообще я Делфи 7 запускал этот код
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
var s:string;//shortstring
    i:byte;
begin
writeln('Введите строку с одинаковыми символами подряд');
readln(s);
for i:=length(s) downto 1 do
if (s[i]=s[i-1])or((s[i]=s[i+1])and(s[i]<>s[i-1]))
then insert(s[i],s,i+1);
write(s);
readln
end.
с разными типами и ошибки не было ни разу
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,451
19.03.2014, 13:00
В консоли в целях совместимости я использую тип ShortString.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2014, 13:00
Помогаю со студенческими работами здесь

Разбивка набора элементов по 6 штук и объединение их в блоки по 6 штук
Есть набор элементов class=&quot;row&quot; Нужно их разбить в группы по 6 штук и обернуть div-ом &quot;list-row&quot; ...

Замена первой группы одинаковых элементов на последнюю группу одинаковых элементов
Всем привет, помогите с заменой первой группы одинаковых элементов в нашем случае пять единиц на последнюю группу одинаковых элементов,...

В строке символов найти максимальное число одинаковых символов стоящих подряд
Разработать программу, которая в любой заданной строке символов находит максимальное число одинаковых символов, стоящих подряд. При поиске...

Выяснить, имеется ли среди символов S1,...,Sn пара соседствующих одинаковых символов
Даны натуральное число n, символы S1,...,Sn. Выяснить, имеется ли среди символов S1,...,Sn пара соседствующих одинаковых символов? Сколько...

Найти количество символов в самой длинной цепочке из одинаковых символов
Дана строка символов St длиной не более 72, которая может состоять из цифр, малых латинских букв и знаков '+' '-' '*' '/' '.' ')' '(' ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru