ПАСКАЛЬ. Срочно!Дана строка, состоящая из русских слов, разделенных пробелами (одним или...

0 голосов
155 просмотров
ПАСКАЛЬ. Срочно!

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

Информатика (26 баллов) | 155 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Const
  Blanks = [' '];

function PosBlank(s: string; pn, pk: integer): integer;
{
  Ищет в строке s в позициях от pn до pk пробельный символ.
  Возвращает его позицию в строке или ноль, если таковой символ не найден.
  Использует подмножество пробельных символов Blanks, что позволяет определять
  произвольный набор пробельных символов (например, табуляцию и т.д.)
}
var
  p: integer;
  flag: boolean;

begin
  p := pn;
  flag := true;
  while flag and (p <= pk) do<br>  begin
    if s[p] in Blanks then flag := false
    else p := p + 1
  end;
  if p > pk then PosBlank := 0
  else PosBlank := p
end;

function PosNonBlank(s: string; pn, pk: integer): integer;
{
  Ищет в строке s в позициях от pn до pk непробельный символ.
  Возвращает его позицию в строке или ноль, если таковой символ не найден.
  Использует подмножество пробельных символов Blanks, что позволяет определять
  произвольный набор пробельных символов (например, табуляцию и т.д.)
}
var
  p: integer;
  flag: boolean;

begin
  p := pn;
  flag:=true;
  while flag and (p <= pk) do<br>  begin
    if s[p] in Blanks then p := p + 1
    else flag := false
  end;
  if p > pk then PosNonBlank := 0
  else PosNonBlank := p
end;

var
  s: string;
  i, l, k: integer;

begin
  Write('Введите строку: ');
  Readln(s);
  l := Length(s);
  k := 0;
  i := PosNonBlank(s, 1, l);
  while (i>0) and (i <= l) do<br>  begin
    k := k + 1;
    i := PosBlank(s, i + 1, l);
    if i = 0 then i := l + 1
    else i := PosNonBlank(s, i + 1, l)
  end;
  Writeln('Количество слов в строке равно ', k)
end.

(142k баллов)
0 голосов

Готово.................Это если между словами всегда один пробел.
UPD.Заменил ,теперь не важно сколько пробелов

(4.8k баллов)
0

Хорошее решение, короткое. Только врет. Вот для такой строки тестовой "Это не просто строка, это строка с многими пробелами " говорит, что слов 10, хотя их 9.

0

Замечание к предыдущему комментарию: Каждое слово, включая первое и последнее, было с обоих сторон окаймлено пробелами в количестве от 2 до 7, но при помещении сюда этот Сервис пробелы скушал.

0

А когда я ввел --это--строка-- (тут - обозначает пробел), программа вообще сказала, что слов 4

0

Да ,что -то я напутал

0

Да потому что нельзя в такой короткой форме охватить все случаи