Взгляни на такое.| Код | PROGRAM Words; TYPE SetOfChar=Set of Char; CONST {Список всех ограничителей слов в строке} Delim_Set : SetOfChar =[' ','.',',','!','?','-',':',';', '(',')','[',']','{','}']; {Выделение слова из строки s. Поиск слова начинается с позиции i. Если слов больше нет, то возвращается пустая строка.} FUNCTION GetNextWord(CONST s:String; VAR i:Integer):String; VAR ResWord : String; BEGIN ResWord:=''; {пока не найдено ни одного слова в строке} {i-текущая позиция в анализируемой строке} {ищем первую букву слова} while (i<=Length(s)) do if (s[i] in Delim_Set) then Inc(i) else Break; {теперь просматриваем слово пока не закончится строка или не начнутся ограничители слов} while (i<=Length(s)) do if (s[i] in Delim_Set) then Break else begin ResWord:=ResWord+s[i]; {добавляем букву слова к результату} Inc(i); end; GetNextWord:=ResWord; END;
VAR s : String; {анализируемая строка} CurWord : String; {текущее слово из строки} OldWord : String; {предыдущее слово из строки} PosInS : Integer; {позиция в строке, с которой функция GetNextWord будет начинать поиск нового слова} BEGIN {ввод или присвоение анализируемой строки} {$IFDEF Debug} s:='otake otake ooo ooo ddd'; {$ELSE} WriteLn('Input string:'); ReadLn(s); {$ENDIF} PosInS:=1; OldWord:=GetNextWord(s, PosInS); while PosInS<Length(s) do begin CurWord:=GetNextWord(s, PosInS); if CurWord='' then Break; if CurWord=OldWord then begin WriteLn(CurWord); end; OldWord:=CurWord; end; END. |
|