Подсчет количества слов в строке | Язык Паскаль

Подсчет количества слов в строке

Подсчитать количество слов во введенной пользователем строке. Считаем, что слова разделяются исключительно одним пробелом, а первый и последний символы строки не являются пробелами.

Описание переменных:

str - строка;
len - длина строки;
count - счетчик слов в строке.

Алгоритм решения задачи:

  1. Измеряем длину введенной пользователем строки.
  2. Устанавливаем счетчик слов в значение 0.
  3. В цикле посимвольно перебираем строку. Если очередной символ является пробелом, увеличиваем счетчик слов.
  4. Поскольку в цикле не было учтено последнее слово (после него нет пробела), мы должны после цикла увеличить счетчик слов на единицу. Однако, если была введена пустая строка, то этого делать не надо. Поэтому перед увеличением счетчика добавляем проверку, что длина строки больше нуля.

Программа на языке Паскаль:

var
    str: string;
    len, count, i: integer;

begin
    readln(str);
    len := length(str); 
    count := 0;

    for i := 0 to len do
        if str[i] = ' ' then
            count := count + 1;
    if len > 0 then 
        count := count + 1;

    writeln(count);
end.

Пример выполнения:

one two three
3

Примечание. Программа не будет корректно работать, если слова разделены больше, чем одним пробелом.

Второй вариант задачи: подсчитать количество слов в строке и вывести длину каждого слова.

var
    str, s: string;
    arr: array[1..255] of string;
    n,i,l: byte;
begin
    readln(str);
    l := length(str);
    n := 0;
    s := '';
    for i:=1 to l do 
        if ((str[i] = ' ') or (i = l)) and (s <> '') then begin
            n := n + 1;
            if (i = l) and (str[i] <> ' ') then s := s + str[i];
            arr[n] := s;
            s := '';
        end
        else
            if str[i] <> ' ' then
                s := s + str[i];
    writeln(n);
    for i:=1 to n do 
        writeln(arr[i],' - ', length(arr[i]));
end.

Пример выполнения программы:

  one two     three   
3
one - 3
two - 3
three - 5

Третий вариант задачи: Подсчитать количество слов в строке и вывести все слова в столбик.

var
    s, w: string;
    l,i: byte;
    count: byte;
begin
    readln(s);
    l := length(s);
    w := '';
    count := 0;
    for i:=1 to l do
        if s[i] <> ' ' then w := w + s[i]
        else
            if w <> '' then begin
                writeln(w);
                w := '';
                count := count + 1;
            end;
    if w <> '' then begin // последнее слово после которого нет пробела
        writeln(w); 
        count := count + 1;
    end;
    writeln(count);    
end.