Text32. Дан символ $$C$$ — прописная (заглавная) русская буква и текстовый файл. Создать строковый файл и записать в него все слова из исходного файла, начинающиеся на эту букву (прописную или строчную). Словом считать набор символов, не содержащий пробелов, знаков препинания и ограниченный пробелами, знаками препинания или началом/концом строки. Если исходный файл не содержит подходящих слов, то оставить результирующий файл пустым.
Решение:
Данное решение работает при командной строке и файле в кодировке OEM 866
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
program Text32; var F_in,F_out: Text; Name,S,Word: string; C,c2:Char; begin Write('File name in: '); Readln(Name); Assign(F_in,Name); Write('File name out: '); Readln(Name); Assign(F_out,Name); Write('C: '); Readln(C); if (ord(C) in [65..90,128..143]) then c2:=chr(ord(C)+32) else if (ord(C) in [144..159]) then c2:=chr(ord(C)+80); Reset(F_in); Rewrite(F_out); Word:=''; While not eof(F_in) do begin Readln(F_in,S); S:=' '+S+' '; While (pos(' '+C,S)<>0) or (pos(' '+c2,S)<>0) do begin if pos(' '+C,S)=0 then Delete(S,1,pos(' '+c2,S)) else if pos(' '+c2,S)=0 then Delete(S,1,pos(' '+C,S)) else if (pos(' '+C,S)<>0) and (pos(' '+c2,S)<>0) then if (pos(' '+C,S)<pos(' '+c2,S)) then Delete(S,1,pos(' '+C,S)) else Delete(S,1,pos(' '+c2,S)); Word:=Copy(S,1,pos(' ',S)-1); Delete(S,1,pos(' ',S)-1); writeln(F_out,Word); end; end; Close(F_in); Close(F_out); end. |
Другие задачи из раздела Text можно посмотреть здесь.
Комментарии: