Строки: в заданном тексте выделить слова на букву "н" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Чтобы помочь Трурлю проверить машину, напишите программу, которая в заданном тексте выделяет слова на букву "н". Программа должна сделать прописной первую буквы всех слов, начинающихся с буквы "н" и длиной не менее трех букв. Под словом будем понимать непрерывную последовательность русских букв, непосредственно перед и после которой нет других русских букв. Во входном файле содержится текст – не менее одной строки длиной не более 255 символов. Текст состоит только из строчных и прописных русских букв (используется кодировка cp866 (DOS)) и знаков препинания. В выходной файл вывести текст из входного файла, превращая первые буквы слов, начинающихся с “н” (ASCII код 173), в прописные (ASCII код 141). Разбиение текста на строки, пробелы и знаки препинания должны сохраниться. Пример ввода Конструктор Трурль создал однажды машину, которая умела делать всё на букву ”Н”. Закончив эту машину, он для пробы заставил её сделать нитки, потом связать из ниток носки, одеть их на ноги, а затем бросить всё это в нору, окружённую незабудками и наличниками. Машина выполнила задание безукоризненно, но Трурль ещё не был уверен в её исправности и стал думать, какие вещи на букву ”Н” можно приказать сделать машине. Вывод для примера Конструктор Трурль создал однажды машину, которая умела делать всё на букву ”Н”. Закончив эту машину, он для пробы заставил её сделать Нитки, потом связать из Ниток Носки, одеть их на Ноги, а затем бросить всё это в Нору, окружённую Незабудками и Наличниками. Машина выполнила задание безукоризненно, но Трурль ещё не был уверен в её исправности и стал думать, какие вещи на букву ”Н” можно приказать сделать машине. помогите, кто знает как это реализовать. Осталась последняя задача вот эта и все. Кто поможет буду благодарен.

Решение задачи: «Строки: в заданном тексте выделить слова на букву "н"»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
 
char* task(char* s){
    char* p, *t = s;
    while((s = strchr(s, 'н')) != NULL){
        if((t == s) || ! isalpha(*(s - 1))){
            p = s;
            while(*p && ! isspace(*p))
                ++p;
#ifdef __GNUC__
            if((p - s) > 3)
#else
            if((p - s) > 2)
#endif
                *s = 'Н';
        }
        ++s;
    }
    return t;
}
 
 
int main(void){
    char s[64] = "наташа не видела нас";
 
    puts( task(s) );
    return 0;
}

Объяснение кода листинга программы

В данном коде на языке C реализована задача по выделению слов, содержащих букву н в заданном тексте. Список действий, которые выполняются в коде:

  1. Включаются необходимые заголовочные файлы:
    • stdio.h - для работы с функциями ввода-вывода;
    • string.h - для работы со строками;
    • ctype.h - для работы с преобразованием символов.
  2. Функция task принимает на вход указатель на строку и возвращает указатель на модифицированную копию этой строки. В этой функции используется два указателя: p - указывает на текущий символ, и t - указывает на начало строки.
  3. Внутри цикла while происходит поиск следующего символа н в строке. Если символ найден, то выполняются следующие действия:
    • Если t равен s, или предыдущий символ не является буквой, то происходит обход цикла, так как н должно быть на границе слова.
    • Переменная p указывает на текущий символ. В цикле while проверяется, является ли текущий символ буквой и не является ли он пробелом. Если это так, то p увеличивается на 1.
    • Если p - s больше 2 (или 3 в некоторых компиляторах), то символ н заменяется на заглавную букву Н.
  4. В функции main создается строка наташа не видела нас в массиве `s.
  5. Вызывается функция task с аргументом s. Результат работы функции выводится на экран с помощью функции puts.
  6. Функция main возвращает 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы