Другие языки программирования и технологии
Помогите найти ошибку...Pascal (строки)
Задача: ввести две строки, удалить из первой строки все слова, которые встречаются во второй строке. Не могу понять в чем ошибка...программа запускается, но что-то не удаляются слова с первой строчки... Вот код проги: program str; var str1, str2 : string; wrd : String; i, j, ps : Integer; procedure FindDelWords(s, s2 : String); begin j := 1; for i := 1 to Length(s2) do if (s2 = ' ') or (i = Length(s2)) then begin wrd := copy(s2, j, (i-j)); j := i+1; ps := Pos(wrd, s); if ps <> 0 then Delete(s, ps, length(wrd) + 1); end; writeln(s); writeln(s2); end; begin WriteLn('Input first str ->'); ReadLn(Str1); WriteLn('Input second str ->'); ReadLn(Str2); finddelwords(str1, str2); ReadLn; end. Заранее огромное спасибо...за ответ - 10 баллов!)
Доброго времени суток.
Что-то я не понял, как вы пытаетесь удалять слова.. . Все проще. Есть две строки. Нужно из второй выделять слова и если очередное слово есть в первой, удалить его. Попробуйте так.
procedure FindDelWords(s1, s2 : String);
var s : String;
begin
s2 := s2 + ' '; {добавим к словам пробелы, чтобы не потерять последнее слово}
s1 := ' ' + s1 + ' '; {а к первому слову еще пробел и спереди (так надо) }
while Pos(' ', s2) > 0 do begin {пока в строке есть пробел, т. е. есть слово}
s := Copy(s2, 1, Pos(' ', s2)); {копируем его в переменную}
Delete(s2, 1, Pos(' ', s2)); {и удаляем из строки}
while Pos(' '+s, s1) > 0 do {пока найденное слово есть в первой строке}
Delete(s1, Pos(s, s1), Length(s)); {удаляем его из нее}
end;
if s1[1] = ' ' then Delete(s1,1,1); {удалим ведущийе и концевые пробелы}
if s1[Length(s1) = ' ' then Delete(s1, Length(s1), 1);
WriteLn(s1); {печатаем то, что осталось от первой строки}
end;
При поиске слов в первой строке к найденному слову добавляем спереди пробел, чтобы корректно обрабатывать такие ситуации в первой строке
qwer wer
wer qwer
и wer во второй.
Остальная программа как у вас. Только при выводе приглашения ко вводу используйте оператор Write(), тогда курсор не переведется на следующую строку и пользователь будет вводить сой текст в той же строке.
Удачи!
Что-то я не понял, как вы пытаетесь удалять слова.. . Все проще. Есть две строки. Нужно из второй выделять слова и если очередное слово есть в первой, удалить его. Попробуйте так.
procedure FindDelWords(s1, s2 : String);
var s : String;
begin
s2 := s2 + ' '; {добавим к словам пробелы, чтобы не потерять последнее слово}
s1 := ' ' + s1 + ' '; {а к первому слову еще пробел и спереди (так надо) }
while Pos(' ', s2) > 0 do begin {пока в строке есть пробел, т. е. есть слово}
s := Copy(s2, 1, Pos(' ', s2)); {копируем его в переменную}
Delete(s2, 1, Pos(' ', s2)); {и удаляем из строки}
while Pos(' '+s, s1) > 0 do {пока найденное слово есть в первой строке}
Delete(s1, Pos(s, s1), Length(s)); {удаляем его из нее}
end;
if s1[1] = ' ' then Delete(s1,1,1); {удалим ведущийе и концевые пробелы}
if s1[Length(s1) = ' ' then Delete(s1, Length(s1), 1);
WriteLn(s1); {печатаем то, что осталось от первой строки}
end;
При поиске слов в первой строке к найденному слову добавляем спереди пробел, чтобы корректно обрабатывать такие ситуации в первой строке
qwer wer
wer qwer
и wer во второй.
Остальная программа как у вас. Только при выводе приглашения ко вводу используйте оператор Write(), тогда курсор не переведется на следующую строку и пользователь будет вводить сой текст в той же строке.
Удачи!
для начало рекомендую почитать вот эту книгу
эта книга совсем тут не к месту =)
Станислав Стас
с удовольствием помог бы, но увы нет паскаля под рукой =(
Похожие вопросы
- Помогите найти ошибку в коде с++. Скорее всего ошибка в сравнении строк.
- помогите найти ошибка в программе на PASCAL тема: "файлы".
- (PASCAL)помогите найти ошибку в коде задачи, и исправить
- Помогите найти ошибку Turbo Pascal
- Помогите найти ошибку Delphi легкая программка
- помогите написать программу Pascal строки
- программирование C++. Помогите найти ошибку
- Помогите найти ошибку в коде
- Помогите найти ошибку qbasic
- Помогите найти ошибку в коде. делфи