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

Задача: Вывести на экран те слова, которые отличны от последнего слова текста и первая буква этого слова входит в него ещё раз.

больше интересует: как найти последнее слово в строке и из каких символов оно состоит.

Заранее спасибо.
volvo
Я ж тебе на Винограде ответил blink.gif

Ну ладно, смотри:
const
  delimit = [#0..#32,'.',',',':',';','!','?','"','+','-'];
type
  TWords = array[1..40] of string;

var
  words : TWords;

function GetWords(before: byte; s : string; var w : TWords) : byte;
var
  i, back, n, count: byte;
  st: string;
begin
  i := 1;
  n := before;
  while(i<=length(s)) do begin
    while(i<=length(s)) and (s[i] in delimit) do inc(i);
    if i<=length(s) then begin
      back := i;
      while(i<=length(s)) and not(s[i] in delimit) do inc(i);
      st := copy(s, back, i-back);

      inc(n);
      w[n] := st;
    end;
  end;
  GetWords := n;
end;

var
  f: text;
  s: string;
  n, i: integer;

begin
  n := 0;
  assign(f, 't.txt'); reset(f);
  while not eof(f) do begin
    readln(f, s);
    n := GetWords(n, s, words);
  end;
  close(f);

  for i := 1 to n - 1 do begin

    s := words[i];
    if (s <> words[n]) and (pos(s[1], copy(s, 2, length(s))) > 0)
    then writeln(s);

  end;

end.


Может, кто-то сделает проще ...

Цитата
как найти последнее слово в строке
На другом форуме было "в тексте". Извини, это ОЧЕНЬ разные вещи!!!
InviZible
я за тобой не успеваю. я только тут, а ты уже там. спасибо.

> На другом форуме было "в тексте". Извини, это ОЧЕНЬ разные вещи!!!
так, я сначала вывожу на экран весь текст через
...
while not eof(f)
readkn(f,s)
....
и в переменной s отсается последнея строка из текста. И мне нужно вытащить из s это слово.
volvo
Цитата
И мне нужно вытащить из s это слово.

А зачем? Ты что, потом, чтоб найти все НЕсовпадающие слова будешь второй раз по файлу проходить?

Ты сначала посмотри, как это сделано в программе, которую тебе предложили, разберись, а потом будешь критиковать.
InviZible
я не криткую.
да, буду второй раз по файлу проходить, т.к. может встретиться такое слово и во всём тексте.
InviZible
Всем спасибо, вот мой вариант

Код

program textproga;
uses crt;
var
bukvi:set of char;
f:text;
slovo,c,s,possl:string;
pslovo,i,k,j:integer;
massl:array[1..100] of string;
begin
clrscr;
assign(f,'E:/tp7/bin/test/text.txt');
reset(f);
bukvi:=['A'..'Z','a'..'z'];
j:=1;
writeln('====Text=====================');
while not eof(f) do
  begin
   readln(f,s);
   writeln(s);
   i:=1;
   while (i <=length(s)) do
    begin
     pslovo:=0;
     if not (s[i] in bukvi) then inc(i);
     slovo:='';
     while (i <=length(s)) and (s[i] in bukvi ) do
      begin
       pslovo:=1;
       slovo:=slovo+s[i];
       inc(i);
      end;
     if pslovo=1 then
      begin
       massl[j]:=slovo;
       inc(j);
      end;
    end;
  end;
writeln('=============================');
for i:=1 to j-1 do
  write(massl[i],' ');
  writeln;

writeln('****last word****************');
possl:=massl[j-1];
writeln(possl);
writeln('*****************************');

for i:=1 to j do
  begin
   slovo:=massl[i];
   c:=slovo[1];
   delete(slovo,1,1);
   if pos(c,slovo) > 0 then
   begin
    slovo:=c+slovo;
    massl[i]:=slovo;
    if (slovo<>possl) then writeln(slovo);
   end;
  end;
{ writeln(possl); esli nujno pechatat' possl }

close(f);
readln;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.