Посчитать количество слов, которые начинаются с одной буквы - C (СИ)
Формулировка задачи:
Доброго времени суток. Прошу помочь в решении следующих задач:
Не могу понять , как составить цикл по проверке слов , начинающихся на одну и ту же букву.
Прошу обойтись без сообщений в духе "почитай про такую-то функцию и поймешь". Просто на данный момент ситуация такая , что решить данные задачи сам я не в состоянии. Надеюсь на вашу поддержку и понимание.
P.S.Решить надо на Си. (желательно без применения с++)
Написать программу ,считывающую строку текста и печатающую таблицу,показывающую ,сколько раз в тексте встречаются слова ,начинающиеся с одной и той же буквы.
#include "stdafx.h"
#include "string.h"
int main ()
{
int k = 0;
char str[] ="Show unnamed handles and mappings";
char *p;
for (p = strtok(str," "); p ; p = strtok (0," "))
return 0;
}Решение задачи: «Посчитать количество слов, которые начинаются с одной буквы»
textual
Листинг программы
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <ctype.h>
int main ()
{
char str[] ="Abf vde avfg cvg a", *p = NULL;
size_t map[127] = {0}, i, mapSize = sizeof(map) / sizeof(*map);
for (p = strtok(str, " "); p; p = strtok(NULL, " "))
{
++map[tolower(*p)];
}
for(i = 0; i < mapSize; ++i)
{
if(isalpha(i) && map[i])
{
printf("%c - %u\n", i, map[i]);
}
}
_getch();
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлены и инициализированы переменные:
str- строка, в которой нужно найти слова, начинающиеся с одной буквы.p- указатель, который будет последовательно указывать на каждое слово в строкеstr.map- массив размером 127, в котором будут подсчитываться слова, начинающиеся с каждой буквы. Начальное значение каждого элемента массива устанавливается равным 0.i- переменная для подсчёта количества слов, начинающихся с каждой буквы.mapSize- размер массиваmap.
- В цикле
forпроисходит разделение строкиstrна слова с помощью функцииstrtok. Каждое слово добавляется к соответствующему элементу массиваmapс помощью оператора++. - В цикле
forпроисходит проверка каждого элемента массиваmap. Если элемент соответствует букве и его значение больше 0, то выводится на экран. - В конце программы вызывается функция
_getch, которая ожидает нажатия клавиши, и программа завершается с возвращаемым значением 0.