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

Задача

Подсчитать количество слов во введенной пользователем строке.

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

Решение

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

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

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

  1. Измеряем длину введенной пользователем строки.
  2. Если длина не нулевая, то это значит, что есть хотя бы одно слово.
  3. Перебираем каждый символ строки.
  4. Если очередной символ является пробелом, то увеличиваем счетчик слов.

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

var
        str: string;
        i, count: integer;
begin
        write('Your string: ');
        readln(str);
 
        i := length(str);
        if i > 0 then begin
                count := 1;
                while i > 0 do begin
                        if str[i] = ' ' then
                                count := count + 1;
                        i := i - 1;
                end;
        end
        else
                count := 0;
 
 
        writeln('Number of words: ', count);
readln;
end.

Примечания: 

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

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

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

Тема

Строки

Уровень

Комбинированные задачи

Комментарии

Подсчитать количество слов в строке (фразе). Разделителями слов являются:

  • пробелы;
  • знаки препинания;
  • знаки арифметических операций;
  • скобки (круглые, квадратные, фигурные).

Да, в (if str[i] = ' ' then) можно указать и or str[i] = '  ' и str[i] = '   '. Тогда будет и с несколькими пробелами работать...

Не важно сколькими пробелами разделены слова, все равно найдет:

procedure Error;
  begin
    writeln('you did not enter any string');
    readln;
    halt;
  end;
var
  j, number, i:integer;
  str:string;
begin
readln(str);
number:=0;
if str='' then Error;
if (str[1]=' ') then delete(str, 1, 1) else inc(number);
for i:=1 to length(str) do
  begin
    if (str[i]=' ') then
      begin
        inc(number);
        repeat
          if (str[i+1]=' ') then
            begin
              delete(str, (i+1), 1);
            end;
        until ((str[i+1])<>' ');
      end;
 
  end;
writeln(number);
readln;
end.

program asd;
uses crt;
var st:string;
i,p:integer;
begin
i:=1;
p:=0;
write('st=');
readln(st);
for i:=1 to length(st) do
if ((st[i-1]<>' ')and(st[i]=' ')) then
p:=p+1;
if ((i=length(st))and(st[i]<>' ')) then
p:=p+1;
writeln(p);
end.

Добавить комментарий