Помощь - Поиск - Пользователи - Календарь
Полная версия: Разбиение на слова.
Форум «Всё о Паскале» > 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
Разобрался, переделал, сдал.
Спасибо за хелп.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.