Здесь на форуме было такое задание: "Отредактировать заданное предложение, удаляя из него слова, которые уже встречались в предложении", а такого еще не было, в общем, уже голова кругом.
![wacko.gif](http://forum.pascal.net.ru/style_emoticons/default/wacko.gif)
![unsure.gif](http://forum.pascal.net.ru/style_emoticons/default/unsure.gif)
constТеперь она выдает, сколько раз встречается каждое слово в предложении... просто проходи по массиву Words (от конца к началу), и удаляй слова, у которых поле amount равняется нужному числу...
delimiter = [#32, ',', '.', '!', ':'];
type
wrd_info = record
start, len: byte;
amount: integer;
end;
function get_words(s: string;
var words: array of wrd_info): integer;
var
count, prev: integer;
i, j, curr_len: byte;
begin
count := -1; i := 1;
while i <= length(s) do begin
while (s[i] in delimiter) and (i <= length(s)) do inc(i);
curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;
if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len;
amount := 1;
end;
prev := 0;
for j := 1 to count - 1 do begin
if copy(s, words[j].start, words[j].len) = copy(s, words[count].start, words[count].len) then begin
inc(words[j].amount);
inc(prev);
end;
end;
inc(words[count].amount, prev);
end;
end;
get_words := count + 1;
end;
const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
i, n: integer;
const
s: string = 'thats,,, all :: folks all bye bye !!! bye !!! bye...';
begin
n := get_words(s, words);
writeln('words:');
for i := 1 to n do
writeln(copy(s, words[i].start, words[i].len), ' : ',
words[i].amount, ' times ... ');
end.
begin
for i:= max_word downto 1 do
if words[i].amount=g then
s[i]:='';
n := get_words(s, words);
writeln('words:');
for i := 1 to n do
writeln(copy(s, words[i].start, words[i].len), ' : ',
words[i].amount, ' times ... ');
ReadLn;
end.
const(delete_it - это и есть число раз, о котором говорится в условии.)
max_word = 255;
delete_it = 2;
var
words: array[1 .. max_word] of wrd_info;
i, n: integer;
const
s: string = 'thats,,, all :: folks all bye bye !!! bye !!! bye...';
begin
n := get_words(s, words);
for i := n downto 1 do
if words[i].amount = delete_it then
delete(s, words[i].start, words[i].len);
writeln(s);
end.
const
max_word = 255;
delete_it = 4;
var
words: array[1 .. max_word] of wrd_info;
i, n: integer;
const
s: string = 'hop cop hop cop hop hop';
begin
n := get_words(s, words);
for i := n downto 1 do
if words[i].amount = delete_it then
delete(s, words[i].start, words[i].len);
writeln(s);
end.
var
count, prev: integer;
i, j, curr_len: INTEGER; { <--- Здесь }
prev := 0;
for j := 0 to count - 1 do begin { <--- Смотрим на стартовое значение !!! }
if copy(s, words[j].start, words[j].len) = copy(s, words[count].start, words[count].len) then begin
inc(words[j].amount);
inc(prev);
end;
end;