Форум «Всё о Паскале» _ Задачи _ Ввести строку текста и
Автор: Fraddy 19.11.2007 21:54
Ввести строку текста. Может быть пустая строка или из одних пробелов. Разделители: пробел ,/?.<;>:”!’*%. Слово- любая последовательность символов, ограниченная с одной или двух сторон разделителями. Удалить последние N слов, содержащих заданную подстроку К раз.
Автор: klem4 19.11.2007 21:57
Что именно не получается ?
Автор: Fraddy 20.11.2007 19:44
Немного не понятно само задание.. тоесть удаление слов, и сама подстрока.
Автор: volvo 20.11.2007 20:22
Цитата
Немного не понятно само задание..
Пример:
abcabcabc,abcabb.bababc<privet>abcabcababc,abcabc,1abc подстрока = 'abc', N = 2, K = 2
Что надо удалить? Сначала посмотрим, какие слова вообще содержат заданную подстроку K раз (рассматривается случай "как минимум K раз", можно больше):
Итого, имеем 3 слова, удовлетворяющих критерию... 2 последних из них надо удалить...
Теперь более понятно, что именно требуется делать?
Автор: Lapp 20.11.2007 20:37
Цитата(volvo @ 20.11.2007 16:22)
(рассматривается случай "как минимум K раз", можно больше): ...
Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее)
Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз.
Автор: Fraddy 20.11.2007 22:18
Цитата(Lapp @ 20.11.2007 16:37)
Мне кажется, что нужно трактовать все же как точное равенство. В противном случае было бы сказано "как минимум". То есть в рассмотренном примере есть только одно слово, удовлетворяющее критерию (предпоследнее)
Я бы добавил еще, чисто для большей ясности, что та самая подстрока может состоять и из одной буквы. Тогда задача пойдет об удалении N последних из тех слов, которые содержат эту букву (ровно) K раз.
Этот вопрос не уточнен... С ровным количеством становится посложнее..
Автор: volvo 20.11.2007 22:32
Цитата
С ровным количеством становится посложнее
Ну, да... Если смена знака с ">=" на "=" - это усложнение, то... Нет слов.
Автор: Fraddy 21.11.2007 0:24
Ну это зависит от структуры програмы.
А сама часть нахождения и удаления как выглядит? Может кто решал похожее?
Автор: Fraddy 29.11.2007 2:05
Ну продолжим... Вот что накалякал:
uses crt; const r:set of char=[' ',',','/','?','.','<','>',':',';','"','!',''','*','%']; var s,c:string; i,ns:byte; F:boolean; Begin clrscr; write('s="); readln (s); i:=1; F:=true; while i<=length(s) then {i - начало слова} Begin ns:=i; C:=''; while (i<=length(s)) and NOT (s[i] in R) do {Проход по слову} Begin if pos(s[i],c)=0 then c:- c+s; inc (i); end;
.
Автор: volvo 29.11.2007 3:07
Поскольку тебе надо удалять слова из строки, не трогая разделители, то лучше всего воспользоваться вот этим кодом: http://forum.pascal.net.ru/index.php?s=&showtopic=6972&view=findpost&p=50581 (но вносить начало и длину слова в массив не сразу, а только после того, как проверишь, действительно ли в найденном слове заданная подстрока встречается нужное число раз)...
Все, что останется после этого сделать - пройти с конца массива, и удалить из исходной строки нужное количество слов. Что вызывает затруднения?
Автор: Fraddy 29.11.2007 6:02
Опа.. спасибо, завтра после универа разберусь надеюсь.. =) решенную пришлю сюды, если будут проблемы обращусь..
Автор: Fraddy 27.12.2007 22:50
в чем ошибка?
Код
uses crt; const r:set of char=[' ',',','/','?','.','<','>',':',';','"','!',''','*','%'];
var g,s,c:string; i,ns:byte; F:boolean; Begin clrscr; write('s="); readln (s); writeln('g='); readln(g); i:=1; F:=true; while i<=length(s) then {i - начало слова} Begin ns:=i; C:=''; while (i<=length(s)) and NOT (s[i] in R) do {Проход по слову} Begin if pos(s[i],c)=0 then c:- c+s; inc (i); end; if pos(g,c)>=1 then begin delete(s,ns,i-ns); f:=false; i:=ns-1 end; end; i:=i+1 end; is f then writeln ('no'); else writeln(s); readkey end. end.
Автор: volvo 27.12.2007 23:10
Цитата
в чем ошибка?
В синтаксисе... Сначала приведи программу к тому виду, в котором она компилируется. В частности, у тебя неправильно задается апостроф во множестве, ошибки в конструкции if/else, да и вообще end-ов больше чем begin-ов...
Да, кстати, что программа должна делать, по-твоему? Можешь объяснить просто алгоритм ее работы? Словами, не Паскалем?