Помогите пожалуйста разработать программу, которая считывает текст из файла и выводит на экран только предложения, в которых нет запятых и двоеточий. Спасибо большое.
С файла читать умеешь? На предложения разбить можешь?
Предложения разделяются чем? В самом верху раздела FAQ есть прикрепленная тема - http://forum.pascal.net.ru/index.php?showtopic=6972 Там можешь посмотреть десяток способов, как разбить строку на слова. Но ведь точно таким же образом группа предложений разбивается на отдельные предложения (только заменить разделители. Для слов - это пробелы, точки, запятые, еще что там нужно; для предложений - точка, вопросительный и восклицательный знак. Можешь еще что-то добавить, неважно).
Итого - алгоритм: либо читаешь все содержимое файла в одну строку, и потом прогоняешь функцию разбивки (вряд ли получится, скорее всего длина файла больше 255 символов, так что не пойдет. Но если меньше - вполне), либо читаешь из файла посимвольно (и собираешь символы в строку), пока не прочел точку или вопрос. знак, или воскл. знак, или перевод строки.
Когда прочел окончание предложения ( .?! ) - смотришь строку. Есть символы ( ,: ) - ничего не делать. Нет - вывести строку на печать.
В общем попробовал сделать это все дело и вот что получилось:
Program File_text;
Uses CRT;
var
f1 : text;
st : string;
n: byte;
i:integer;
ka:integer;
begin
ClrScr;
assign (f1, 'file1.txt');
rewrite (f1);
writeln ( f1, 'Tolko ety stroky dolshno vivesty. v etoi stroke nety zapyatih i dvoetochiy');
writeln ( f1, 'I ety toje parampampam');
writeln ( f1, 'sdfsdfsdf,');
writeln ( f1, 'sdfsdf:');
writeln ( f1, 'sdfsdfd:,');
close (f1);
reset (f1);
while not eof (f1) do
begin
readln (f1, st);
for i:= 1 to length(st) do
begin
if (st[i] =':') OR (st[i] =',') then
writeln(st);
end;
end;
close (f1);
readln
end .
добавить переменную - флаг
while not eof (f1) doТак попробуй, я не тестил
begin
readln (f1, st);
flag:=true;
i:=1;
while (i<=length(st)) and (flag) do
begin
if (st[i] =':') OR (st[i] =',') then flag:=false;
inc(i);
end;
if flag then writeln(st);
end;
while not eof (f1) doТак попробуй, я не тестил
begin
readln (f1, st);
flag:=true;
i:=1;
while (i<=length(st)) and (flag) do
begin
if (st[i] =':') OR (st[i] =',') then flag:=false;
inc(i);
end;
if flag then writeln(st);
end;
Добавил переменную, которая содержит в себе признак отсутсвия двоеточия или запятой