Не такое оно и сложное. Главная проблема - то, что между словами может быть несколько пробелов. Устраним её, написав функцию, которая оставляла бы между словами по 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;
Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.
Объяснение: возможно говорящая команда но это не точно