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