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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 15:28   #1
Svetik2252
 
Регистрация: 02.12.2009
Сообщений: 6
Вопрос Паскаль. Удаление из слов предыдущие вхождения в него последней буквы.

Здравствуйте.

Дана строка, состоящая из латинских символов. Символы, разделенные пробелами, будем называть слова.

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

Мой код почему-то не работает, хотя вроде бы и все правильно, нужна помощь в нахождении ошибки в коде...

uses crt;
var s:string;
v:string[1];
i,j:byte;
begin
clrscr;
write('Введите строку');
readln(s);
i:=length(s);
repeat
if copy(s,i,1)<>' ' then
begin
v:=copy(s,i,1);
j:=i-1;
while (j>=1) and (copy(s,j,1)<>' ') do
begin
if copy(s,j,1)=v then begin
delete(s, j, 1);
inc(j);
end;
dec(j);
end;
i:=j;
end;

dec(i);
until i<1;
writeln(s);
readln;
end.
Svetik2252 вне форума Ответить с цитированием
Старый 11.12.2009, 18:44   #2
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

Вам нужно чтобы на запрос "Chem dalshe v les tem bolshe drov" программа выдала "Chem dalse v ls t bolh dro"? Такая логика?
AlexanderKs вне форума Ответить с цитированием
Старый 11.12.2009, 18:59   #3
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

Если да, то вот код.

Код:
uses Crt;
var
  s,slovo:string;
  i,j:integer;
begin
Readln(s);
     {ищем и удаляем последнее слово...}
for i:=1 to Length(s) do
  if (s[i]=' ') and (s[i+1] in ['a'..'z','A'..'Z']) then j:=i;
for i:=j to length(s) do
  if (s[i] in ['a'..'z','A'..'Z']) then slovo:=slovo+s[i];
j:=1;
while j>0 do begin
  j:=pos(slovo,s);
  if j>0 then
    Delete(s,j,Length(slovo));
end;
     {слово удалили, ищем и удаляем символы}
i:=1;
while i<=Length(s) do begin
  if (s[i]=' ') and (s[i-1]<>' ') then begin
    j:=i;
    while j<Length(s) do begin
      if s[j]=s[i-1] then
        Delete(s,j,1);
      inc(j);
    end;
  end;
inc(i);
end;

Writeln(s);

Readln;
end.
AlexanderKs вне форума Ответить с цитированием
Старый 11.12.2009, 19:32   #4
Svetik2252
 
Регистрация: 02.12.2009
Сообщений: 6
По умолчанию

Мне нужно чтобы она выдала вместо:
bjkblb ahjkh okhl
jklb ajkh okhl
то есть нашла в слове последнюю букву, и если такие же буквы есть в этом же слове, то удалила их...
Svetik2252 вне форума Ответить с цитированием
Старый 11.12.2009, 20:01   #5
AlexanderKs
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 60
По умолчанию

Если хотите получить более менее подходящий ответ, правильно ставьте вопрос.

Код:
uses Crt;
var
  s,slovo:string;
  i,j:integer;
  buf:char;
begin
Readln(s);
     {ищем последнее слово}
for i:=1 to Length(s) do
  if (s[i]=' ') and (s[i+1] in ['a'..'z','A'..'Z']) then j:=i;
for i:=j to length(s) do
  if (s[i] in ['a'..'z','A'..'Z']) then slovo:=slovo+s[i];
    {ищем и удаляем символы}
i:=1;
while i<=Length(s) do begin
  if (s[i]=' ') and (s[i-1]<>' ') then begin
    j:=i-2;
    buf:=s[i-1];
    if copy(s,j-Length(s),Length(s))<>slovo then begin
       while s[j]<>' ' do begin
         if s[j]=buf then
           Delete(s,j,1);
         dec(j);
       end;
    end;
  end;
inc(i);
end;

Writeln(s);

Readln;
end.

Последний раз редактировалось AlexanderKs; 11.12.2009 в 20:06.
AlexanderKs вне форума Ответить с цитированием
Старый 11.12.2009, 20:24   #6
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

решение задачи:
Код:
const
  Alphabet = ['A'..'Z', 'a'..'z'];

function ModifiedWord(Word: String): String;
var
  LastLetter: Char;
  S: String;
  I: Integer;
begin
  LastLetter := Word[Length(Word)];  { последняя буква }
  S := '';
  for I := 1 to Length(Word) - 1 do
    if Word[I] <> LastLetter then S := S + Word[I];
  S := S + LastLetter;
  ModifiedWord := S;
end;

var
  I, N: Integer;
  S, Word, LastWord: String;
begin
  ReadLn(S);
  { находим последнее слово }
  LastWord := '';
  I := Length(S);
  while (S[I] in Alphabet) and (I >= 1) do
  begin
    LastWord := Concat(S[I], LastWord);
    Dec(I);
  end;
  { найдено }
  I := 1;
  while I <= Length(S) - Length(LastWord) do
  begin
    if S[I] in Alphabet then
    begin
      Word := '';
      while (S[I] in Alphabet) and (I <= Length(S)) do
      begin
        Word := Word + S[I];
        Inc(I);
      end;
      if Word <> LastWord then Write(ModifiedWord(Word), ' ');
    end;
    Inc(I);
  end;
  Write(LastWord);
  ReadLn;
  ReadLn;
end.

Последний раз редактировалось Alex_FF; 11.12.2009 в 20:27.
Alex_FF вне форума Ответить с цитированием
Старый 11.12.2009, 20:30   #7
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Цитата:
Мой код почему-то не работает, хотя вроде бы и все правильно, нужна помощь в нахождении ошибки в коде...
ошибка не в коде - ошибка - ваш код
Alex_FF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление слов из строки С vivo89 Помощь студентам 4 13.11.2009 22:13
Удаление слов из текста Gery Помощь студентам 24 22.09.2009 14:37
Удаление отступов в последней ячейке каждой строки в каждой таблице Busine2009 Microsoft Office Word 7 06.06.2009 12:27
В заданной строке символов заменить все первые буквы слов на заглавные NV-salt Общие вопросы C/C++ 4 05.04.2009 18:41
удаление одинаковых слов (С/С++) jewel Помощь студентам 1 12.12.2008 15:14