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

Задача

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

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

Решение

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

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.

Примечания: 

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

Тема

Строки

Уровень

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

Теги

Комментарии

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

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

Да, в (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.

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