Как новый сотрудник, я собираюсь дать вам перерыв и постараюсь ответить на вопрос, который вы не задавали. ;)
Я полагаю, что вопрос "как действовать". Это будет длинный ответ , так как я постараюсь быть очень подробным, поскольку вы, кажется, новичок. Надеюсь, это поможет вам или кому-то еще.
Хитрость заключается в том, чтобы взять словесную задачу и преобразовать ее в математическое решение. Лучший способ сделать это - написать «псевдокод». (См. Википедия для получения дополнительной информации, если вам нужно.) В конце я собираюсь дать вам некоторый псевдокод, но поскольку это, кажется, домашнее задание, пожалуйста, попробуйте сначала написать свой собственный псевдокод. , Если вы читаете псевдокод, и он все равно не помогает, я могу опубликовать свое решение позже. (Я не очень хороший программист, так что это может быть не самая лучшая программа 1010 *. И это потребовало слишком много времени, чтобы придумать это.)
Перво-наперво: в коде, который вы разместили, есть опечатка. В предоставленном вами исходном коде проблема заключается в операторе return 1
, если файл не найден. Это должно быть return -1
, потому что, что случилось бы, если бы у вас был тестовый файл, который имел ровно 1 букву? Код не будет работать правильно.
Теперь, чтобы сначала преобразовать проблему слова, которую вам дали: вам нужно иметь массив слов, чтобы отслеживать 1-буквенные, 2-буквенные и т. Д. Слова. Теперь согласно это самое длинное слово в словаре английского языка - 45 букв. Итак, теоретически, вам нужно иметь массив из 45 элементов wordCounts
. Вы можете сократить это по мере необходимости.
Теперь, чтобы обработать переменную str
, вам нужен оператор while
, чтобы пройти по одному символу за раз. Поскольку символы в строке идут от элемента 0 до единицы, меньшего, чем переменная len
, вам необходимо соответствующим образом кодировать while
.
В этом while
вам нужно еще while
. Это время должно подсчитывать wordLength
по одному символу за раз, пока вы не увидите пробел или завершающий символ '/ 0' str
. Для этого вы инициализируете wordLength на ноль прямо перед вторым временем. Затем добавьте 1 к wordLength для каждого подсчитанного вами символа и увеличьте значение subscript
.
В конце этого внутреннего while
вам нужно накопить свои wordCounts. Имейте в виду, что ваши однобуквенные слова будут накапливаться в элементе 0 вашего массива. Поэтому вам нужно настроить элемент массива wordLength - 1
. После этого вам нужно увеличить свой индекс, который вы используете, чтобы пройти по str
, по одному символу за раз.
В конце вам нужно распечатать значения массива wordCounts. Так как большинство длин слов будет иметь значение ноль, я бы не стал их печатать. Если вы не установите максимальную длину массива wordCounts равной 10, а не 45. Вы хотите, чтобы цикл for
проходил через ваш массив wordCounts и делал что-то вроде этого: printf("%2d letter words = %d", ..., ...);
. Имейте в виду, что ваши однобуквенные слова будут в элементе 0;
Это очень подробная версия проблемы со словами, которая является решением проблемы "подсчитать количество слов в этой фразе от однобуквенных слов до x буквы ".
Вот псевдокод, который я придумал после кодирования моего решения. Это немного более подробно, чем обычный псевдокод. (Лично я сокращаю все имена переменных и использую регистр Pascal, но это только я.)
Объявите числовой массив wordCounts
и subscript
.
For
каждый элемент wordCounts, обнулить количество слов или код не будет работать правильно.
Повторная инициализация subscript
до нуля.
Пока (while
) нижний индекс меньше len
, продолжайте.
Инициализировать wordLength
на ноль.
Пока str[subscript]
не является пустым или нулевым символом, добавьте 1 к длине слова.
Увеличить индекс.
После того, как оба while
выражения завершены, распечатайте массив wordLengths, как описано выше.
Готово!
Теперь я могу опубликовать фактический код, который можно использовать для полученияс этим псевдокодом, но было бы лучше, если бы вы придумали его сами.Если вы попытаетесь, но в вашем коде будет ошибка, опубликуйте новый вопрос, и я постараюсь проверить, чтобы ответить на него.Надеюсь, это поможет вам или кому-то еще.