GAECHKA
Твоя помощница в решении задач

Строка: Подсчитать и вывести на экран количество слов и количество всех букв в предложении,а также количество букв 'b'.

Считать предложение из файла .Слова разделены двумя пробелами. Подсчитать и вывести на экран количество слов и количество всех букв в предложении,а также количество букв 'b'.Каждое слово-на новой строке . Предложение: A bad beginning makes a bad ending
0
вопрос задан

Источник


2 ответа
program Zadanie122;
uses
  windows;
{ Программа открывает текстовый файл, подсчитывает количество слов в предложении,
  подсчитывает количество букв в предложении (не путать с количеством знаков),
  подсчитывает количество букв "b"  в предложении. Все найденные слова выводятся
  каждое с новой строки.}
const
albe = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
enword ='.,;!?    ';
namefile = 'data001.txt';
var
  a : string;  // Переменная для хранения вводимой строки.
  a1,a2: string; // Промежуточные переменные для хранения слов.
 len: integer; //  Переменная для хранения значения длины входной строки.
 i: integer;  // Промежуточная переменная для организации цикла.
 begW: integer; // Переменная для хранения значения начального индекса слова.
 sizew: integer; // Переменная для хранения значения размера слова.
 wd: boolean; // Промежуточная счетная переменная.
 numword: integer; // Переменная для хранения значения количества слов в предложении.
 numletter: integer;  // Переменная для хранения количества букв (но не знаков вообще) в предложении.
 numletter_b_: integer;   // Переменная для хранения значения  количества буквы "b"  в предложении.
 ff: text;    //  Файловая переменная.
 
begin
SetConsoleOutputCP(cp_utf8);
assign(ff,namefile);
Reset(ff);
while not EOF(ff) do
  begin
    Read(ff,a);
  end;
  Writeln(a);
  Close(ff);
  len := length(a);
  i := 1;
  numword:= 0;
  numletter:= 0;
  numletter_b_:= 0;
  wd:= false;
  while i = len+1 do
    begin
    a1:=copy(a,i,1);
    if (pos(a1,albe)  0) then
      inc(numletter);
    if (pos(a1,'b')  0) then
      inc(numletter_b_);
    if (pos(a1,albe)  0) and (not wd) then
       begin
       begw:=i;
       wd:= true;
       end;
    if ((pos(a1,enword)0) or (i = len+1))  and (wd) then
         begin
           sizew:=i-begw;
           a2:=copy(a,begw,sizew);
           Writeln(a2);
           wd:=false;
           inc(numword);
         end;
 
  inc(i);
  end;
Writeln('Количество слов в предложении: ', numword);
Writeln('Количество букв в предложении: ', numletter);
Writeln('Количество букв "b" в предложении: ', numletter_b_ );
Readln;
end.
Все проще гораздо:
{$mode objfpc}
uses classes, sysutils, strutils;
 
var
  s : string;
begin
  with TStringList.Create do
  try
    loadfromfile('001.txt');
    s := Text;
    writeln('Количество слов = ', wordcount(s, [' ']));
    writeln('Количество букв = ', length(delspace(s)));
    writeln('Количество букв "b" = ', length(s) - length(stringreplace(s, 'b', '', [rfreplaceall])));
  finally
    free;
  end;
end.
Добавлено через 1 минуту
Каждое слово-на новой строке
Какое "каждое"? В задании про то, что надо еще и каждое слово ВЫВОДИТЬ нет ни слова. Посчитать и вывести - это разные вещи!