Написать программу используя указатель второго ранга - C (СИ)
Формулировка задачи:
Найти строку, содержащую наибольшее количество слов, и вывести ее на экран монитора.
Количество строк 5, а максимальное число символов в строке - 80. Массив строк ввести с помощью инициализации
Примечания: Данные вводятся с клавиатуры. В программе при обращении к элементу массива нельзя использовать дополнительную переменную для вычисления его адреса.
Задачу нужно решить применяя указатель второго ранга.
Буду очень признателен за помощь.
Решение задачи: «Написать программу используя указатель второго ранга»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> /* #include <wordexp.h> size_t wc(const char * s) { wordexp_t w; size_t cnt; cnt = ( wordexp(s, &w, WRDE_NOCMD) ) ? 0 : w.we_wordc; wordfree(&w); return cnt; } */ size_t wc(const char * s) { size_t cnt = 0, inword = 0; for ( ; *s; ++s ) { if ( isspace(*s) ) { if ( inword ) { cnt += 1; inword = 0; } } else inword = 1; } return cnt + inword; } char ** max_words_string(char ** strings, size_t count) { return ( count < 2 ) ? strings : max_words_string(strings + (wc(strings[0]) < wc(strings[count - 1])), count - 1); } #define STRINGS_COUNT 5 #define STRING_SIZE 81 #define STRING_MASK "%80[^\n]%*c" const char * STRING_NUMBERS[] = { "first", "second", "third", "fourth", "fifth" }; int main(void) { char strings[STRINGS_COUNT][STRING_SIZE]; int i /* ,maxidx */; char * pointers[STRINGS_COUNT]; for ( i = 0; i < STRINGS_COUNT; ++i ) pointers[i] = strings[0] + STRING_SIZE * i; printf("Enter %u strings:\n", STRINGS_COUNT); for ( i = 0; i < STRINGS_COUNT && scanf(STRING_MASK, strings[i]) == 1; ++i ) ; if ( i < STRINGS_COUNT ) { printf("Not enough strings entered!.\n"); return 1; } /* for ( maxidx = 0, i = 1; i < STRINGS_COUNT; ++i ) if ( wc(strings[i]) > wc(strings[maxidx]) ) maxidx = i; printf("\nMaximum words in %s string.\n", STRING_NUMBERS[maxidx]); */ printf("\nMaximum words in %s string.\n", STRING_NUMBERS[max_words_string(pointers, STRINGS_COUNT) - pointers]); return 0; }
Объяснение кода листинга программы
- Программа считывает строки из стандартного ввода до тех пор, пока не будет введено 5 строк.
- Переменная
max_words_string
рекурсивно находит строку с максимальным количеством слов в массиве строк. - Переменная
mainidx
инициализируется значением 0. - В цикле перебираются строки, и если количество слов в текущей строке больше, чем в строке с максимальным количеством слов, то
maxidx
обновляется. - Выводится сообщение с номером строки, содержащей максимальное количество слов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д