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

0 голосов
97 просмотров

Pascal ABC кто разбирается, задание очень сложное.

Дана строка содержащая любые символы кроме русских букв.

Под "словом" будем понимать последовательность символов, ограниченную пробелами или стоящую в конце или начале строки. Между словами может быть несколько пробелов. Так же пробелы могут быть в конце или начале строки.

Написать функцию, которая в заданной строке находит количество cлов - палиндромов.

Использовать заголовок:

function CalcWord(Stroka: string): integer;


Информатика (56 баллов) | 97 просмотров
Дан 1 ответ
0 голосов

Не такое оно и сложное.
Главная проблема - то, что между словами может быть несколько пробелов.
Устраним её, написав функцию, которая оставляла бы между словами по 1 пробелу:

function RemoveSpaces(str : string) : string;
begin
   //Тут цикл for, переписанный через while
   var iter := 1;
   //Проходим по строке
   while (iter < str.Length) do
   begin
      //Если видим 2 пробела подряд, удаляем 1 и откатывает итератор.
      if (str[iter] = ' ') and (str[iter + 1] = ' ') then
         begin
            str := str.Remove(iter, 1);
            iter -= 1;
         end;
      iter += 1;
   end;
   RemoveSpaces := str;
end;


Теперь мы можем получить кол-во слов очень просто:

function CalcWords(str : string) : integer;
begin
   CalcWords := RemoveSpaces(str).Split(' ').Count();
end;


Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.

полный код: https://pastebin.com/A63ggdWm

(152 баллов)