Определить количество слов в строке длиной от N-1 до N+1 символов - C (СИ)
Формулировка задачи:
Дана строка предложение. Определить количество слов в строке длиной от
N-1 до N+1 символов. Число N указывает пользователь
Помогите пожалуйста, а то как-то условия не очень понимаю(
Решение задачи: «Определить количество слов в строке длиной от N-1 до N+1 символов»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define DELIM " \t\n" typedef char string_t[256]; #define get_string(s) ( scanf("%255[^\n]%*c", (s)) == 1 ) typedef unsigned length_t; #define get_length(pl, pt) ( scanf("%u%c", (pl), (pt)) == 2 && *(pt) == '\n' ) int main(void) { string_t str; length_t len; char tail; while ( printf("String: ") && get_string(str) && printf("Average length: ") && get_length(&len, &tail) ) { char * ptr = strtok(str, DELIM); while ( ptr ) { length_t wordlen = strlen(ptr); if ( wordlen >= len - 1 && wordlen <= len + 1 ) printf("%s\n", ptr); ptr = strtok(NULL, DELIM); } } return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек: stdio.h и string.h.
- Определение строки-разделителя и типа строки.
- Установка значений макросов:
DELIM
- разделитель,string_t
- тип строки,get_string
- функция считывания строки,get_length
- функция считывания длины строки. - Объявление переменных:
str
- строка,len
- длина строки,tail
- символ конца строки. - Организация цикла, который считывает строку, длину слова и выводит слова, длина которых находится в заданном диапазоне.
- Внутри цикла считывается первое слово и сохраняется его указатель.
- Пока есть слова в строке, выводится каждое слово, удовлетворяющее условию, и считывается следующее слово.
- После выхода из цикла, программа завершается.
- Значение
DELIM
- это строка, разделяющая слова в строке (\t\n
). - Тип
string_t
- это массив символов длиной 256. - Макрос
get_string
считывает строку, не включая символ новой строки, и возвращает 1 при успешном считывании. - Макрос
get_length
считывает два значения: целое число и символ новой строки. - Если второе значение равно символу новой строки, функция возвращает 2.
- В цикле слова в строке разделяются по символам из
DELIM
. - Если длина слова находится в заданном диапазоне, слово выводится на экран.
- Для определения диапазона длин слов используется операция инкремента и декремента.
- Значение
len
- это длина строки, считанная функциейget_length
. - Значение
tail
- это символ новой строки, считанный функциейget_length
. - В цикле используются функции
strtok
иstrlen
для разделения строки на слова и определения длины каждого слова. - Если длина слова находится в заданном диапазоне, слово выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д