Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 20.02.2013, 17:10   #1
spaincome
 
Регистрация: 20.02.2013
Сообщений: 4
Репутация: 10
По умолчанию Замена символов в строке

Текст задачи: Написать программу которая считав строку преобразует ее следующим образом:

строка анализируется и преобразуется сначала и до тех пор, пока не встретиться символ #. данный символ обязательно присутствует в строке ;

символ точки, преобразуется на символ восклицательный знак;

восклицательный знак преобразуется в «два восклицательных знака подряд»;

символ запятой, преобразуется в символ «+»;

И в конце вывести количество преобразований

Формат ответа: файл с исходным кодом решения задачи на одном из допустимых языков программирования.

ЯП:Pascal

Входные данные (программа должна считать):

STR (тип данных : строка) — Строка для преобразования. Длина строки не превышает 255 символов

Выходные данные (программа должна вывести):

Преобразованная строка согласно правилам и количество проделанных преобразований.

Значения должны быть выведены каждый раз с новой строки и соблюдая приведенную выше последовательность
spaincome вне форума   Ответить с цитированием
Старый 21.02.2013, 10:30   #2
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 404
Репутация: 108

icq: 600-927-970
По умолчанию

Код:
...
i:=1;
while s[i]<>'#' do begin
  if s[i]='!' then begin
     insert('!',s,i);
     i:=i+1;
  end
  else if s[i]='.' then s[i]='!'
         else if s[i]=',' then s[i]='+';
  i:=i+1;
end;
...
__________________
Хотите отблагодарить, нажмите на весы
rubius2008 вне форума   Ответить с цитированием
Старый 21.02.2013, 11:04   #3
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,126
Репутация: 5675
По умолчанию

во-первых, не проверял, но боюсь, что код
Цитата:
Код:
  if s[i]='!' then begin
     insert('!',s,i);
     i:=i+1;
  end
приведёт к бесконечному циклу, пока память под строку не переполнится (будет вставляться восклицательный знак и на следующем шаге он же и будет обрабатываться, значит, будель вставляться восклицательный знак и т.д.

а во-вторых, вы забываете подсчитать количество операций...
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 21.02.2013, 15:04   #4
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 404
Репутация: 108

icq: 600-927-970
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, не проверял, но боюсь, что кодприведёт к бесконечному циклу, пока память под строку не переполнится (будет вставляться восклицательный знак и на следующем шаге он же и будет обрабатываться, значит, будель вставляться восклицательный знак и т.д.

а во-вторых, вы забываете подсчитать количество операций...
а еще ниже
Код:
i:=i+1;
__________________
Хотите отблагодарить, нажмите на весы
rubius2008 вне форума   Ответить с цитированием
Старый 21.02.2013, 15:15   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,126
Репутация: 5675
По умолчанию

Цитата:
Сообщение от rubius2008 Посмотреть сообщение
а еще ниже
Код:
i:=i+1;
ага. точно. правда Ваша, я не обратил внимание, что в конце цикла наращивание идёт при любом символе.



p.s. замечание про подсчёт количества операций остаётся в силе!
впрочем, думаю, что автор темы вполне в состоянии его добавить самостоятельно.
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 21.02.2013, 15:26   #6
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 404
Репутация: 108

icq: 600-927-970
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. замечание про подсчёт количества операций остаётся в силе!
впрочем, думаю, что автор темы вполне в состоянии его добавить самостоятельно.
Да, проглядел, согласен, пусть сам немного подумает
__________________
Хотите отблагодарить, нажмите на весы
rubius2008 вне форума   Ответить с цитированием
Старый 21.02.2013, 18:57   #7
PavelDD
Пользователь
 
Регистрация: 15.02.2013
Адрес: Санкт-Петербург
Сообщений: 35
Репутация: 22
По умолчанию

Пишу на Pascal.

Код:
uses crt;
const n = 5;
var  x:string;
     a:array[1..n] of string;
     i,k:integer;
begin
   clrscr;
   write('Введите 5 элементов(вместе с #): ') ;
   for i:=1 to n do
      readln(a[i]);
   for i:=1 to n do   begin
        if a[i]<>'#' then begin
            if a[i]='!' then begin
                a[i]:='!!';
                k:=k+1;
            end;
            if a[i]='.' then begin
                a[i]:='!';
                k:=k+1;
            end;
            if a[i]=',' then begin
                a[i]:='+';
                k:=k+1;
            end;
        end
        else break;
   end;
   for i:=1 to n do
       writeln(a[i]);
   write('  Кол-во преобразований: ',k);
end.
Попробуйте так.
PavelDD вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена символов в строке(ячейке) pooli Microsoft Office Excel 6 27.09.2010 08:46
Замена во вводимой строке всех повторяющихся символов их восьмеричными представлениями. С++ AquaticSoul Помощь студентам 4 07.03.2010 23:48
Замена символов на слова в строке Shihmars Общие вопросы C/C++ 3 24.01.2010 19:51
TASM: Замена символов в строке. APTEMUC Assembler 2 18.01.2010 06:48
замена символов в строке euhenia Помощь студентам 3 30.11.2009 21:59


23:34.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.