Написать программу которая считывает текст из файла и определяет сколько в нем слов с

Обновлено: 04.07.2024

Длина динамической строки может быть переменной. Динамические строки нельзя инициализировать при создании.

Длина нединамической строки должна быть константным выражением.

При задании длины строки необходимо учитывать завершающий нуль-символ.

Присваивание строк выполняется с помощью функций библиотеки.

Для консольного ввода-вывода строк используются функции библиотеки gets(),scanf() иputs(),printf().

Ввод-вывод из файла выполнять с помощью функций библиотеки fgets(),fscanf() иfputs(),fprintf().

Посимвольное чтение из файла неэффективно.

Разбивайте написание программы на последовательность шагов.

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

Средства,предоставляемые языком, влияют на алгоритм решения задачи, и по­этому перед тем, как продумывать алгоритм, необходимо эти средства изучить.

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

Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, содержащие введенное с клавиатуры слово.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко строки, содержащие двузначные числа.

Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, не содержащие запятых.

Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не более чем четырех букв.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко цитаты, то есть предложения, заключенные в кавычки.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, состоящие из заданного количества слов.

Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко строки, не содержащие двузначных чисел.

Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, начинающиеся с тире, перед которым могут находиться только пробельные символы.

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

Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до 9 на слова «ноль», «один», . «девять», начиная каждое предложение с новой строки.

Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.

Написать программу, которая считывает текст из файла и выводит на экран снача­ла вопросительные, а затем восклицательные предложения.

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

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

Написать программу, которая считывает текст из файла и выводит на экран снача­ла предложения, начинающиеся с однобуквенных слов, а затем все остальные.

Написать программу, которая считывает текст из файла и выводит на экран пред­ложения, содержащие максимальное количество знаков пунктуации.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не более чем четырех букв. UML-диаграмма этого алгоритма приведена на рисунке 8.5.

Рисунок 8.5 - UML-диаграмма деятельности для примера 8.6

Листинг 8.7

// Лабораторная работа №_8

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

setlocale( LC_ALL, "Russian" );

int n, s, ss, i, ii;

const int len = 100;

char word[len], line[len];

cout<< " Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не более чем четырех букв. \n" ;

cout<<"\nНажмте клавишу для продолжения. \n\n" ;

int lword = static_cast<int>(strlen(word));

for (i = 0; i < ii; i++)

cout << "\nВ файле содержатся слова, содержащие не более 4-х букв в количестве " << ss << " шт.";

Аппаратура и материалы. Для выполнения лабораторной работы необходим персональный компьютер со следующими характеристиками: процессор Intel Pentium-совместимый с тактовой частотой 800 МГц и выше, оперативная память - не менее 64 Мбайт, свободное дисковое пространство - не менее 500 Мбайт, устройство для чтения компакт-дисков, монитор типа Super VGA (число цветов от 256) с диагональю не менее 15². Программное обеспечение - операционная система Windows2000/XP и выше, среда разработки приложений Microsoft Visual Studio.

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

Методика и порядок выполнения работы.Перед выполнением лабораторной работы каждый студент получает индивидуальное задание. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.Порядок выполнения работы:

1.Проработать примеры, приведенные в лабораторной работе.

2. Составить программу с использованием двумерных локальных массивов для решения задачи. Размерности локальных массивов задавать именованны­ми константами, значения элементов массива - в списке инициализации. Номер варианта определяется по формуле , где - номер студента по списку преподавателя.

Индивидуальное задание №1. Вариант:

1. Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.

2. Написать программу, которая считывает текст из файла и выводит на экран толь­ко предложения, содержащие введенное с клавиатуры слово.

3. Написать программу, которая считывает текст из файла и выводит на экран толь­ко строки, содержащие двузначные числа.

4. Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.

5. Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.

Функция добавляет s2 к s1 и возвращает s1. В конец результирующей строки добавляется нуль-символ.

char *strchr(char *s, int ch);

Ищет символ в строке

Функция возвращает указатель на первое вхождение символа ch в строку s, если его нет, то возвращается NULL.

int strcmp(char *s1, char *s2);

Функция сравнивает строки и возвращает отрицательное (если s1 меньше s2), нулевое (если s1 равно s2) или положительное (если s1 больше s2) значение.

char *strcpy(char *s1, char *s2);

Копирует одну строку в другую

Функция копирует s2 в s1 и возвращает s1.

char *strncpy(char *s1, char *s2, size_t n);

Копирует первые n символов одной строки в другую

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

char *strrchr(char *s,int ch);

Ищет символ в строке

Функция возвращает указатель на первое вхождение символа ch в строку s справа, если его нет, возвращает NULL.

char *strstr(char *s1, char *s2);

Ищет подстроку в строке

Функция выполняет поиск первого вхождения подстроки s2 в строку s1. В случае удачного поиска, возвращает указатель на элемент из s1, с которого начинается s2, и NULL в противном случае.

double strtod(const char *str, char **end);

Преобразует строку в число

Функция преобразует строку символов в числовое значение и возвращает его. При переполнении возвращает +/-HUGE_VAL При невозможности выполнить преобразование или исчезновении порядка возвращает 0. В обоих последних случаях errno устанавливается в ERANGE. end указывает на символ, на котором преобразование завершается.

char *strtok(char *s1, char *s2);

Выделяет из строки лексемы

Функция возвращает следующую лексему из s1, отделенную любым из символов из набора s2.

1.4.2<ctype.h> (<cctype>) – функции классификации и преобразования типов

int tolower(int ch);

Возвращает символ в нижнем регистре

Функция получает параметр ch и возвращает его в нижнем регистре. В параметре ch используется только младший байт.

int toupper(int ch);

Возвращает символ в верхнем регистре

Функция получает параметр ch и возвращает его в верхнем регистре. В параметре ch используется только младший байт.

int isalnum(int ch);

Проверяет, является ли символ буквой или цифрой

Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой или цифрой, или false в противном случае.

int isalpha(int ch);

Проверяет, является ли символ буквой

Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой, или false в противном случае.

int isdigit(int ch);

Проверяет, является ли символ цифрой

Функция выделяет младший байт параметра ch и возвращает значение true, если символ ch является цифрой, или false в противном случае.

2) Работа с файлами в С++

Файл – именованный набор байтов, который может быть сохранен на некотором накопителе. Под файлом понимается некоторая последовательность байтов, которая имеет своё, уникальное имя, например файл.txt. В одной директории не могут находиться файлы с одинаковыми именами. Под именем файла понимается не только его название, но и расширение, например: file.txt и file.dat—разные файлы, хоть и имеют одинаковые названия. Существует такое понятие, как полное имя файла – это полный адрес к директории файла с указанием имени файла, например: D:\docs\file.txt. Важно понимать эти базовые понятия, иначе сложно будет работать с файлами.

Для работы с файлами необходимо подключить заголовочный файл <fstream>.В <fstream> определены несколько классов и подключены заголовочные файлы <ifstream>—файловый ввод и <ofstream>—файловый вывод.

Файловый ввод/вывод аналогичен стандартному вводу/выводу, единственное отличие – это то, что ввод/вывод выполнятся не на экран, а в файл. Если ввод/вывод на стандартные устройства выполняется с помощью объектов cin и cout, то для организации файлового ввода/вывода достаточно создать собственные объекты, которые можно использовать аналогично операторам cin иcout.

Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++. Для этого необходимо проделать следующие шаги:

  1. создать объект класса ofstream;
  2. связать объект класса с файлом, в который будет производиться запись;
  3. записать строку в файл;
  4. закрыть файл.

Почему необходимо создавать объект класса ofstream, а не класса ifstream? Потому, что нужно сделать запись в файл, а если бы нужно было считать данные из файла, то создавался бы объект класса ifstream.

// создаём объект для записи в файл ofstream /*имя объекта*/; // объект класса ofstream

Назовём объект – fout, Вот что получится:

ofstream fout;

Для чего нам объект? Объект необходим, чтобы можно было выполнять запись в файл. Уже объект создан, но не связан с файлом, в который нужно записать строку.

fout.open("cppstudio.txt"); // связываем объект с файлом

Через операцию точка получаем доступ к методу класса open(), в круглых скобочках которого указываем имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий файл будет заменен новым. Итак, файл открыт, осталось записать в него нужную строку. Делается это так:

fout << "Работа с файлами в С++"; // запись строки в файл

Используя операцию передачи в поток совместно с объектом fout строка Работа с файлами в С++ записывается в файл. Так как больше нет необходимости изменять содержимое файла, его нужно закрыть, то есть отделить объект от файла.

fout.close(); // закрываем файл

Итог – создан файл со строкой Работа с файлами в С++.

Объединим весь код и получим следующую программу.

using namespace std;

int main(int argc, char* argv[])

ofstream fout("cppstudio.txt"); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt

fout << "Работа с файлами в С++"; // запись строки в файл

fout.close(); // закрываем файл

Осталось проверить правильность работы программы, а для этого открываем файл cppstudio.txt и смотрим его содержимое, должно быть — Работа с файлами в С++.

Для того чтобы прочитать файл понадобится выполнить те же шаги, что и при записи в файл с небольшими изменениями:

  1. создать объект класса ifstream и связать его с файлом, из которого будет производиться считывание;
  2. прочитать файл;
  3. закрыть файл.

using namespace std;

int main(int argc, char* argv[])

setlocale(LC_ALL, "rus"); // корректное отображение Кириллицы

char buff[50]; // буфер промежуточного хранения считываемого из файла текста

ifstream fin("cppstudio.txt "); // (ВВЕЛИ НЕ КОРРЕКТНОЕ ИМЯ ФАЙЛА)

if (!fin.is_open()) // если файл не открыт

cout << "Файл не может быть открыт!\n"; // сообщить об этом

fin >> buff; // считали первое слово из файла

cout << buff << endl; // напечатали это слово

fin.getline(buff, 50); // считали строку из файла

fin.close(); // закрываем файл

cout << buff << endl; // напечатали эту строку

В программе показаны два способа чтения из файла, первый – используя операцию передачи в поток, второй – используя функцию getline(). В первом случае считывается только первое слово, а во втором случае считывается строка, длинной 50 символов. Но так как в файле осталось меньше 50 символов, то считываются символы включительно до последнего. Обратите внимание на то, что считывание во второй раз (строка 17) продолжилось, после первого слова, а не с начала, так как первое слово было прочитано в строке 14. Результат работы программы показан на рисунке 1.


Рисунок 1 — Работа с файлами в С++

Режимы открытия файлов

Режимы открытия файлов устанавливают характер использования файлов. Для установки режима в классе ios_base предусмотрены константы, которые определяют режим открытия файлов (см. Таблица 1).

Таблица 1 — режимы открытия файлов
Константа Описание
ios_base::in открыть файл для чтения
ios_base::out открыть файл для записи
ios_base::ate при открытии переместить указатель в конец файла
ios_base::app открыть файл для записи в конец файла
ios_base::trunc удалить содержимое файла, если он существует
ios_base::binary открытие файла в двоичном режиме

Режимы открытия файлов можно устанавливать непосредственно при создании объекта или при вызове функции open().

ofstream fout("cppstudio.txt", ios_base::app); // открываем файл для добавления информации к концу файла fout.open("cppstudio.txt", ios_base::app); // открываем файл для добавления информации к концу файла

Режимы открытия файлов можно комбинировать с помощью поразрядной логической операции или |, например: ios_base::out | ios_base::trunc — открытие файла для записи, предварительно очистив его.

Объекты класса ofstream, при связке с файлами по умолчанию содержат режимы открытия файлов ios_base::out | ios_base::trunc.То есть файл будет создан, если не существует. Если же файл существует, то его содержимое будет удалено, а сам файл будет готов к записи. Объекты класса ifstreamсвязываясь с файлом, имеют по умолчанию режим открытия файла ios_base::in— файл открыт только для чтения. Режим открытия файла ещё называют — флаг, для удобочитаемости в дальнейшем будем использовать именно этот термин. В таблице 1 перечислены далеко не все флаги, но для начала этих должно хватить.

Обратите внимание на то, что флаги ateиappпо описанию очень похожи, они оба перемещают указатель в конец файла, но флаг app позволяет производить запись, только в конец файла, а флаг ate просто переставляет флаг в конец файла и не ограничивает места записи.

ПРИМЕР

Написать программу, которая считывает текст из файла и выводит на экран предложения,

содержащие максимальное количество знаков пунктуации.

1)считать весь файл в строку, для этого узнать размер файла и выделить столько памяти для строки и считать туда файл

2)разбить строку по предложениям с помощью лексем-разделителей, и посчитать кол-во пунктуаций в предложении

3)записать эту информацию в массив структуры

4)найти максимальное кол-во знаков пунктуации в массиве структур

5)вывести на экран предложения, содержащие максимальное количество знаков пунктуации

using namespace std;

SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода

SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода

if (!ifs.is_open()) // если файл не открыт

cout << "Файл не может быть открыт!\n"; // сообщить об этом

// Получаем длину файла:

// Выделяем память соответственно размеру файла:

buffer = new char[length];

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

Sentence *arrSentence = new Sentence[length / 100 + 10];

// считываем данные в буфер одним блоком:

char *next_token1 = NULL;

char *next_token2 = NULL;

//разбиваем текст файла на предложения с помощью лексем

char *token1 = strtok_s(buffer, delim, &next_token1);

int n = 0, maxPunctuationCount = 0;

while (token1 != NULL)

strcpy(arrSentence[n].senten, token1);//копируем предложение в массив

if (strtok_s(token1, punktuation, &next_token2) != NULL)

while (strtok_s(NULL, punktuation, &next_token2) != NULL)

//ищем максимальное кол-во пунктуаций в предложениях

maxPunctuationCount = maxPunctuationCount > count ? maxPunctuationCount : count;

//переходим к следующему предложению

token1 = strtok_s(NULL, delim, &next_token1);

cout << "Печатаем предложения с макс. кол-вом пунктуаций = " << maxPunctuationCount << endl;

for (int i = 0; i < n; i++)

if (arrSentence[i].count == maxPunctuationCount)



Лабораторная работа № 11. Работа со строками в C++. Потоки ввода-вывода. Файловые операции

Цель и порядок работы

Цель работы – ознакомиться с возможностями ввода-вывода языка C++, освоить основные операции работы со строками и файлами.

Порядок выполнения работы:

- ознакомиться с описанием лабораторной работы;

- получить задание у преподавателя, согласно своему варианту;

- написать программу и отладить ее на ЭВМ;

Контрольные вопросы

1. Какие виды строк существуют в C++?

2. Как объявить C-строку?

3. Как осуществляется ввод-вывод строк?

4. Какие операции над строками вы знаете?

5. Перечислите операции над символами?

6. Перечислите стандартные потоки ввода-вывода?

7. Как создать файловый поток?

8. Какие режимы открытия файлов существуют?

9. Что такое двоичный режим ввода-вывода?

10. Что такое текстовый режим ввода-вывода?

11. Как осуществляется чтение символов и строк?

12. Как изменить текущую позицию в файле?

13. Как узнать текущую позицию в файле?

14. Для чего используется метод clear()?

Варианты заданий

Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.

Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово.

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.

Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.

Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих не более чем из четырех букв.

Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.

Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного количества слов.

Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.

Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.

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

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

Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до 9 на слова «ноль», «один», . «девять», начиная каждое предложение с новой строки.

Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.

Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.

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

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

Репутация: нет
Всего: нет

написать программу ,которая считывает текст из файла и выводит его на экран,после каждого предложения добавляя,сколько раз встретилось в нём введенное с клавиатуры слово

Репутация: нет
Всего: нет

using namespace std;

// Функция печатает количество слов in_word в предложении in_sentence.
void printSentence(const string& in_word, const string& in_sentence) // Количество слов
int count=0;
// Позиция в строке (для поиска)
size_t str_position=0;
// Пока есть слово в строке
while ((str_position=in_sentence.find(in_word,str_position))!=string::npos) bool beginOk=false;
bool endOk=false;

if (str_position==0)
beginOk=true;
else beginOk=isWordDelimiter(in_sentence[str_position-1]);
>

if ((str_position+in_word.length())==in_sentence.length())
endOk=true;
else endOk=isWordDelimiter(in_sentence[str_position+in_word.length()]);
>

// Увеличиваем счетчик слов.
if (endOk && beginOk) ++count;
// Увеличиваем позицию для поиска.
str_position+=in_word.length();
>
// Выводим предложение, и количество слов.
cout << in_sentence << " " << count << endl;
>

int main() // Просим ввести слово.
cout << "Enter the word, please:" << endl;
string word;
cin >> word;

ifstream fin(FILE_NAME, ios::in);
if (!fin)

char ch;
string currentSentence;
while (fin.get(ch)) if (ch!=END_OF_SENTENCE) // Если это не конец предложения, то читаем дальше.
currentSentence.push_back(ch);
> else <
// Если конец предложения
printSentence(word,currentSentence);
currentSentence.clear();
>
>
fin.close();
return 0;
>
Вот код программы,запускаю ввожу слово,она у меня вылетает. подскажите,в чём дело.

Репутация: 33
Всего: 37

Lady000, а с чего вы решили что она вылетает? Она просто завершается. Для того чтобы увидеть результат поставьте в конце задержку. Ну хотя бы так:

user posted image

Я знаю, что ничего не знаю© Сократ

Репутация: нет
Всего: нет

у меня стоит Dev-C++,запускаю программу,ввожу слово,она у меня вылетает почему-то(

Репутация: 33
Всего: 37

using namespace std;

Вот бинарники созданные компиляторами GNU GCC (g++) и Digital Mars (dmc)

Присоединённый файл ( Кол-во скачиваний: 1 )
archive.7z 183,02 Kb

user posted image

Я знаю, что ничего не знаю© Сократ

Под понятием произвольного доступа к файлу подразумевается ряд различных моментов:

-можно произвольно обращаться к любой записи или любому байту в файле, в противоположность последовательному доступу, когда данные извлекаются или передаются в поток строго по очереди;

-в открытом файле можно произвольно чередовать операции чтения и записи;

-ввод-вывод с произвольным доступом является по преимуществу бесформатным.

Для позиционирования потока используются функции seekg() и seekp().

Разница между ними в том, что первая перемещает позицию чтения в потоке, а вторая устанавливает новую позицию в выходном потоке. Если используется поток типа fstream, и он открыт в режиме чтения-записи, то все равно, какую функцию применять для позиционирования.

Для определения текущей позиции tellg() и tellp(). Первая возвращает позицию чтения во входном потоке, а вторая – позицию в выходном потоке.

Рассмотрим примеры использования функции работы с файлами и строками.

Пример 11.3 Поиск вхождения слова в файле

using namespace std;

const int len = 81;

char word[len], line[len], end_word[] = done;

//пересоздадим файл и откроем для чтения/записи

fstream f(lab11.txt, ios::in | ios::out | ios::trunc);

//введем несколько строк для дальнейшего поиска в них

//с файловым потоком можно работать как со стандартными cin и cout

//продолжаем пока не введем done

while (strcmp(line, end_word));

//сбросим файловый поток на начало

//содержимое файла на экран

//выполняем пока не достигнем конца файла

//сбрасываем бит-признак конца файла eofbit

//сбросим файловый поток на начало

//определим длину искомого слова

size_t l_word = strlen(word);

//счетчик вхождения слова

//читаем построчно и ищем слово word в строке

while (f.getline(line, len))

//поместим указатель p на начало строки

//strstr возвращает указатель

// на элемент из строки p с которого начинается word

while (p = strstr(p, word))

//используем указатель не текущую позицию в строке

//переместим p на символ сразу за концом слова

//проверим стоит ли наше слово отдельно

//или это просто подстрока в другом (большем) слове

//проверим совпадает ли начало слова с началом строки

//проверим символ перед началом слова

//на принадлежность к разделителям

//начинается не с начала строки и

//не с разделителя = ищем дальше

//символы перед началом слова подходят

//проверяем символы за окончанием слова

//если это пробелы, символы пунктуации

//или конец строки = увеличиваем счетчик слов

Рассмотрим другой подход к решению предложенной выше задачи. В библиотеке C++ есть функция strtok, которая разбивает предложенную строку на лексемы в соответствии с заданным набором разделителей. При ее использовании нет необходимости выделять и проверять начало и конец слова. Потребуется лишь сравнит с искомым словом, слово, выделенное strtok. Для этого просто необходимо задать разделители.

Пример 11.4 Поиск вхождения слова в файле с помощью strtok

using namespace std;

const int len = 81;

char word[len], line[len], end_word[] = done;

//пересоздадим файл и откроем для чтения/записи

fstream f(lab11.txt, ios::in | ios::out | ios::trunc);

//введем несколько строк для дальнейшего поиска в них

//продолжаем пока не введем done

while (strcmp(line, end_word));

//сбрасываем бит-признак конца файла eofbit

//сбросим файловый поток на начало

//Указатель на начало слова

//счетчик вхождения слова

//читаем построчно и ищем слово word в строке

while (f.getline(line, len))

//находим первый символ не из разделителей

//находим первый символ не из разделителей

token = strtok(line, delims);

//проверяем, остались ли еще слова

while ( token != NULL )

//strtok заменяет символ после разделителя

//на NULL поэтому можно сравнивать искомое и

if (!strcmp(token, word))

//Для поиска следующей лексемы в той же строке

//strtok необходимо передать NULL

token = strtok(NULL, delims);

Пример 11.5 Произвольный доступ к файлу

// Открыть файл как двоичный сразу для ввода и вывода

// (создать новый, если отсутствует или перезаписать старый)

// Ввести элементы с клавиатуры

// Поменять знак четных элементов

using namespace std;

const int NP = 10;

const int IS = sizeof(int); //размер элемента int

// Открытие файла для чтения/записи.

ios::binary | ios::in | ios::out | ios::trunc);

// Первоначальная запись файла.

//Приводим pt к типу char* для нормальной работы write

// Чтение файла от конца к началу.

//Перемещаемся к i-му элементу с конца

fs.seekg(-(i + 1) * IS, ios::end);

//Приводим pt к типу char* для нормальной работы read

// Переписать четные индексы.

//перемещаемся к i-му элементу

fs.seekg(2 * i * IS);

//читаем i-ый элемент

//меняем значение на противоположное

//возвращаемся на шаг назад, к только что прочитанному элементу

//выводим файл на экран

Замечание. Когда эта программа открывает уже существующий файл, он усекается до нулевой длины (т.е. все его данные теряются). Если необходимо работать с уже имеющимися в файле данными, нужно убрать бит ios::trunc из режима открытия потока.

1. Какие виды строк существуют в C++?

2. Как объявить C-строку?

3. Как осуществляется ввод-вывод строк?

4. Какие операции над строками вы знаете?

5. Перечислите операции над символами?

6. Перечислите стандартные потоки ввода-вывода?

7. Как создать файловый поток?

8. Какие режимы открытия файлов существуют?

9. Что такое двоичный режим ввода-вывода?

10.Что такое текстовый режим ввода-вывода?

11.Как осуществляется чтение символов и строк?

12.Как изменить текущую позицию в файле?

13.Как узнать текущую позицию в файле?

14.Для чего используется метод clear()?

1. Написать программу в соответствии с вариантом задания из пункта 5.

2. Отладить и протестировать программу.

3. Оформить отчёт.

Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.

Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово.

Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.

Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.

Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.

Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих не более чем из четырех букв.

Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.

Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного количества слов.

Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.

Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.

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

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

Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.

Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.

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

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

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

Написать программу, которая считывает текст из файла и выводит на экран предложения, содержащие максимальное количество знаков пунктуации.

Написать программу, которая считывает текст из файла и записывает в другой только строки, не содержащие символов пунктуации (точка, запятая и т.д.)

Написать программу, которая считывает текст из файла и определяет, сколько в нем строчек, содержащих не более чем три пустых символа (пробел, табуляция и.т.д.).

Написать программу, которая считывает из одного текстового файла строчки и сохраняет их в другой файл в обратном порядке.

Написать программу, которая считывает текст с экрана в файл и выводит его обратно на экран, заменяя арабские цифры римскими (представление чисел не учитывать, заменять только сами цифры).

1. Титульный лист.

2. Наименование и цель работы.

3. Краткое теоретическое описание.

4. Задание на лабораторную работу.

5. Схема алгоритма.

6. Листинг программы.

7. Результаты выполнения программы.

Статьи к прочтению:

Уроки по С++.1 урок.Как создать программу?


Похожие статьи:

Читайте также: