В файл записан текст, нужно вывести на экран все слова, которые начинаются и заканчиваются одной буквой. Не использовать string. Не использовать STL

Строки в C++ сложны для начинающих, т.к. сами по себе представляют массивы символов, а массивы понять иногда не так уж и просто. Есть, конечно, те кто сходу понимает, но многим трудно. Частично проблема работы со строками у новичков связана с недостатком разнообразных примеров. Конечно, много примеров можно найти, но понимать суть их работы обычно тяжело, хотя, по сути они часто обычные студенческие задачки, которые сами по себе просты.
Одна из проблем работы со строками — выделение памяти. Можно не выделять, но многие используют выделение памяти для работы и не представляют, что не всегда имеет смысл выделять, перевыделять. Ведь выделение памяти ресурсозатратно, а значит иногда имеет смысл этого выделения избегать. Вот пример С++ для начинающих, который как раз показывает возможность избежать работы с выделением и перевыделением памяти.

Задача следующая.

  • В файл записан текст, нужно вывести на экран все слова, которые начинаются и заканчиваются одной буквой. Не использовать string. Не использовать STL

Для микроупрощения я буду считать, что две одинаковые буквы в разных регистрах не являются одинаковыми. (Так будет чуть-чуть меньше кода). Соответственно, латинская А и русская А также различны, ибо имеют разные числовые коды. Учесть мне это не проблема, но задача статьи сосредоточить внимание на непосредственных приемах решения.

Первое — разработка некоторой стратегии решения.
Т.к. сама по себе задача может иметь множество подходов для творчества, то имеет смысл остановиться на одном из всех.
Можно посимвольно читать файл и по прочитанным символам составлять слово, после чего это слово проверять на равенство первой и последней буквы. Если равенство справедливо — то выводить слово на экран. Само по себе посимвольное чтение вполне можно использовать для разбиения на слова, для этого нужно только определиться, что считать за разделители. Прочитанное слово нужно где-то хранить, для этого достаточно объявить массив символов. Ничего придумывать не будем, дабы не осложнять сейчас то, что еще в принципе не особо-то и понимаем. Как-то нужно узнавать первый и последний символ слова. С первым проблем нет — если курсор, бегающий по строке находится в начальной позиции, и прочитан значащий символ-не разделитель, то это первый символ, сложнее с последним символом слова. В примере я решил не мудрить и добавить одну переменную, в которую на каждой итерации будет записываться символ, если этот символ не является разделителем.

Вся эта вводная часть нужна для понимания работы примера, который я решил показать. А вот и сам пример.

  • Код C++ вытащить из файла слова, которые начинаются и заканчиваются одним и тем же символом. Для начинающих
    minGW (CodeBlocks)

Проверил по файлу с текстом

    текст для проверки
    слово барак кабак
    капитан, налим, махал

После последнего слова надо, чтоб был 1 символ (пробел или перенос строки или что-то подобное), иначе последнее слово не попадет на обработку. Есть в коде такой момент, что int ch, а не char ch, а потом приведение этого ch к int. Это нужно, чтобы нормально прочитался файл., т.к. читаю посимвольно, то это необходимая мера.,а т.к. тип переменной ch объявлен как int, то, чтобы работать с переменной ch как с символом, приходится его приводить к типу char.

Выше уже описано как происходит процесс работы, листинг прокомментирован и надеюсь разобрав такой пример вы чему-то полезному для себя научитесь.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

97 − 92 =

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/arnold-villemer/programmirovanie-na-s/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

У программиста есть два состояния: "Втупляю" и "Попёрло". (C) Gen

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок