Помощь - Поиск - Пользователи - Календарь
Полная версия: Разбиение на слова.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
MrDeath
Я взял прогу с топика в шапке
Разбиение на слова. Все способы.

Сделал её такой:
program m1;
const
delimiter = ['@', '#', '$', '%','&'];
type
wrd_info = record
start, len: byte;
end;

function get_words(s: string;
var words: array of wrd_info): integer;
var
count: integer;

i, 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
end;
end;

end;
get_words := count + 1;
end;


const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
i, n,bn :integer;
s,ss:string;
begin
readln (s);
n := get_words(s, words);
writeln('words:');
bn:=n;
while i<bn do begin
ss:=ss+ copy(s, words[i].start, words[i].len);
inc(i); inc(i);
writeln(ss);
end;
writeln(ss);
end.


Условие моей задачи: дана строка. Слова разделяются спец символами задаными во множесте ['@', '#', '$', '%','&']. Надо удалить из строки чётные слова.

Проблемы:
В переделаной проге удаляются нечётные слова. И почему то правильно работает если разделитель '#' при других разделителях уже сбивается.
volvo
Пример ввода, на котором сбой происходит, приведи...

Во вторых, если хочешь НОРМАЛЬНУЮ работу - проходи по словам от N к 1, и УДАЛЯЙ из исходной строки все, что тебе не нужно, а не конструируй новую строку...

Вот так:
begin
// readln (s);
s := 'this$is$just$a$test$of$string$';
n := get_words(s, words);
writeln('result = ');

i := n;
if odd(i) then dec(i);
while i > 1 do begin
delete(s, words[i].start, words[i].len);
dec(i, 2);
end;
writeln(s);
end.
Все нормально работает...
MrDeath
А как дслеать что бы и разделители удалялись?
пробывал делать -1,+1 в делит но удаляет не все разделители
volvo
Ты хочешь ВСЕ разделители удалить вообще? Или какие-то конкретно? В приведенной мной строке какой должен быть результат?

P.S. Я, между прочим, просил привести вводимые данные! Сколько раз повторять? ТЕЛЕПАТЫ на другом форуме !!!
MrDeath
Разобрался, переделал, сдал.
Спасибо за хелп.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.