Найти строку максимальной длины в тексте без библиотеки string.h - C (СИ)
Формулировка задачи:
Нужна программа определения строки максимальной длины в тексте, что вводится с клавиатуры без библиотеки string.h
Решение задачи: «Найти строку максимальной длины в тексте без библиотеки string.h»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
typedef struct Word_t {
char* str;
size_t len;
} Word;
//-----------------------------------------------------------------------------
size_t getWord(char* str, char** begin, char** end) {
for (; *str && !isalpha(*str); ++str) { ; }
*begin = str;
for (; *str && isalpha(*str); ++str) { ; }
*end = str;
return *end - *begin;
}
//-----------------------------------------------------------------------------
Word getMaxWord(char* str) {
Word maxWord = {NULL, 0};
char* begin, * end;
size_t len = 0;
while ((len = getWord(str, &begin, &end))) {
if (maxWord.len < len) {
maxWord.str = begin;
maxWord.len = len;
}
str = end;
}
return maxWord;
}
//-----------------------------------------------------------------------------
int main() {
char text[] = "Hello World. This is test program!";
Word word = getMaxWord(text);
if (word.len) {
printf("%.*s\n", word.len, word.str);
}
return 0;
}
Объяснение кода листинга программы
- Структура
Word_tобъявляет переменныеstrиlenтипаchar*иsize_tсоответственно. - Функция
getWordпринимает два указателяstrи два указателя-результатаbeginиend. - В первой части цикла, пока не встретится буква или пробел, строка сдвигается к следующему символу.
- Во второй части цикла, пока не встретится символ, не являющийся буквой, строка сдвигается к следующему символу.
- Длина слова сохраняется в переменной
len, и если это слово длиннее, чем предыдущее максимальное слово, то обновляется значениеmaxWord. - В цикле while, пока есть слова в строке, вызывается функция
getWordи проверяется, является ли текущее слово длиннее максимального слова. - Если текущее слово длиннее, то обновляется значение
maxWord. - В функции
mainобъявляется переменнаяtextтипаchar*и инициализируется строкойHello World. This is test program!. - Вызывается функция
getMaxWordс аргументомtext. - Результат функции
getMaxWordприсваивается переменнойword. - Если длина слова больше нуля, то выводится максимальное слово.
- В функции
mainвозвращается 0, что означает успешный конец работы программы.