Определить количество слов в строке длиной от 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для разделения строки на слова и определения длины каждого слова. - Если длина слова находится в заданном диапазоне, слово выводится на экран.