А какая критика будет на этот код?
Код | uses crt; const CChar= ['А'..'Я','а'..'я']; CDelim= [' ','{','}',',','.','!','?','`','~','^','&','%']; type TAlf= set of char; {-----------------------------------------------} function WordCompareWithAlf (theWord: string; theAlf: TAlf): boolean; var i: integer; r: boolean; begin r:= true; for i:= 1 to length(theWord) do if not (theWord[i] in theAlf) then begin r:= false; break; end; WordCompareWithAlf:= r; end; {-----------------------------------------------} function PopWordFromString (var theStr: string; var theWord: string; theDelimiter: TAlf): boolean; var i, j: integer; begin i:= 1; while not (theStr[i] in theDelimiter) do inc(i); j:= i; while (theStr[j] in theDelimiter) do inc(j); theWord:= copy (theStr, 1, i-1); Delete (theStr, 1, j-1); if (length(theWord) = 0) then PopWordFromString:= false else PopWordFromString:= true; end; {-----------------------------------------------} var str, word: string; begin str:= 'Привет мир, I g? :-) to хом'; while (PopWordFromString(str, word, CDelim)) do begin if (WordCompareWithAlf(word, CChar)) then write (word, ' '); end; end.
|
Кстати следующая строка не однозначна, и упирается в реализацию конкретного компилятора:
Код | 3. CChar= ['А'..'Я','а'..'я'];
|
Т.к. значения интервала бируться из таблицы в которой может иметь место разрыв (в котором будут распологаться совсем не те символы которые нам необходимы). Поэтому я и вводил константную сторку, чтобы исключить вероятность возникновения такой проблемы.
|