Функция добавляет 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);
Работа с файлами с++. Чтение из файла с++ ifstream. Изучение С++ для начинающих. Урок #116
Ищет символ в строке
Функция возвращает указатель на первое вхождение символа 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 () – функции классификации и преобразования типов
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 в противном случае.
Работа с файлами с++. Запись в файл. c++ ofstream. Изучение С++ для начинающих. Урок #115
2) Работа с файлами в С++
Файл – именованный набор байтов, который может быть сохранен на некотором накопителе. Под файлом понимается некоторая последовательность байтов, которая имеет своё, уникальное имя, например файл.txt. В одной директории не могут находиться файлы с одинаковыми именами.
Под именем файла понимается не только его название, но и расширение, например: file.txt и file.dat— разные файлы, хоть и имеют одинаковые названия. Существует такое понятие, как полное имя файла – это полный адрес к директории файла с указанием имени файла, например: D:docsfile.txt. Важно понимать эти базовые понятия, иначе сложно будет работать с файлами.
Для работы с файлами необходимо подключить заголовочный файл . В определены несколько классов и подключены заголовочные файлы — файловый ввод и — файловый вывод.
Файловый ввод/вывод аналогичен стандартному вводу/выводу, единственное отличие – это то, что ввод/вывод выполнятся не на экран, а в файл. Если ввод/вывод на стандартные устройства выполняется с помощью объектов cin и cout, то для организации файлового ввода/вывода достаточно создать собственные объекты, которые можно использовать аналогично операторам cin и cout.
Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++. Для этого необходимо проделать следующие шаги:
- создать объект класса ofstream;
- связать объект класса с файлом, в который будет производиться запись;
- записать строку в файл;
- закрыть файл.
Почему необходимо создавать объект класса 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.close(); // закрываем файл
Осталось проверить правильность работы программы, а для этого открываем файл cppstudio.txt и смотрим его содержимое, должно быть — Работа с файлами в С++.
Для того чтобы прочитать файл понадобится выполнить те же шаги, что и при записи в файл с небольшими изменениями:
- создать объект класса ifstream и связать его с файлом, из которого будет производиться считывание;
- прочитать файл;
- закрыть файл.
using namespace std;
int main(int argc, char* argv[])
setlocale(LC_ALL, «rus»); // корректное отображение Кириллицы
char buff[50]; // буфер промежуточного хранения считываемого из файла текста
ifstream fin(«cppstudio.txt «); // (ВВЕЛИ НЕ КОРРЕКТНОЕ ИМЯ ФАЙЛА)
if (!fin.is_open()) // если файл не открыт
fin >> buff; // считали первое слово из файла
fin.getline(buff, 50); // считали строку из файла
fin.close(); // закрываем файл
В программе показаны два способа чтения из файла, первый – используя операцию передачи в поток, второй – используя функцию 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()) // если файл не открыт
char delim[] = «. «, punktuation[] = «,:;-‘»;
// Получаем длину файла:
// Выделяем память соответственно размеру файла:
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,
int n = 0, maxPunctuationCount = 0;
while (token1!= NULL)
strcpy(arrSentence[n].senten, token1);//копируем предложение в массив
if (strtok_s(token1, punktuation, next_token2)!= NULL)
//ищем максимальное кол-во пунктуаций в предложениях
maxPunctuationCount = maxPunctuationCount > count? maxPunctuationCount: count;
//переходим к следующему предложению
token1 = strtok_s(NULL, delim,
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 на слова «ноль», «один». «девять», начиная каждое предложение с новой строки.
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.
Написать программу, которая считывает текст из файла и выводит его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введенное с клавиатуры слово.
Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратном порядке.
Содержание отчета
1) Титульный лист.
2) Наименование и цель работы.
3) Краткое теоретическое описание.
4) Задание на лабораторную работу.
5) Схема алгоритма.
6) Листинг программы.
7) Результаты выполнения программы.
Источник: infopedia.su
Пример 8.6. Определение количества слов в файле, состоящих не более чем из четырех букв
Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не более чем четырех букв. UML-диаграмма этого алгоритма приведена на рисунке 8.5.
Рисунок 8.5 — UML-диаграмма деятельности для примера 8.6
Листинг 8.7
// Лабораторная работа №_8
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
int n, s, ss, i, ii;
const int len = 100;
char word[len], line[len];
int lword = static_cast(strlen(word));
Аппаратура и материалы. Для выполнения лабораторной работы необходим персональный компьютер со следующими характеристиками: процессор Intel Pentium-совместимый с тактовой частотой 800 МГц и выше, оперативная память — не менее 64 Мбайт, свободное дисковое пространство — не менее 500 Мбайт, устройство для чтения компакт-дисков, монитор типа Super VGA (число цветов от 256) с диагональю не менее 15². Программное обеспечение — операционная система Windows2000/XP и выше, среда разработки приложений Microsoft Visual Studio.
Указания по технике безопасности. Техника безопасности при выполнении лабораторной работы совпадает с общепринятой для пользователей персональных компьютеров, самостоятельно не производить ремонт персонального компьютера, установку и удаление программного обеспечения; в случае неисправности персонального компьютера сообщить об этом обслуживающему персоналу лаборатории (оператору, администратору); соблюдать правила техники безопасности при работе с электрооборудованием; не касаться электрических розеток металлическими предметами; рабочее место пользователя персонального компьютера должно содержаться в чистоте; не разрешается возле персонального компьютера принимать пищу, напитки.
Методика и порядок выполнения работы. Перед выполнением лабораторной работы каждый студент получает индивидуальное задание. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.Порядок выполнения работы:
1.Проработать примеры, приведенные в лабораторной работе.
2. Составить программу с использованием двумерных локальных массивов для решения задачи. Размерности локальных массивов задавать именованными константами, значения элементов массива — в списке инициализации. Номер варианта определяется по формуле , где — номер студента по списку преподавателя.
Индивидуальное задание №1. Вариант:
1. Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.
2. Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово.
3. Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
4. Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.
5. Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.
6. Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
7. Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не менее чем семи букв.
8. Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.
9. Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.
10. Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.
11. Написать программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед которым могут находиться только пробельные символы.
12. Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с гласной буквы, на прописную.
13. Написать программу, которая считывает текст из файла и выводит его на экран, зааменив цифры от 0 до 9 на слова «ноль», «один». «девять», начиная каждое предложение с новой строки.
14. Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
15. Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.
16. Написать программу, которая считывает текст из файла и выводит его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введенное с клавиатуры слово.
17. Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратном порядке.
18. Написать программу, которая считывает текст из файла и выводит на экран сначала предложения, начинающиеся с однобуквенных слов, а затем все остальные.
19. Написать программу, которая считывает текст из файла и выводит на экран предложения, содержащие минимальное количество знаков пунктуации.
Содержание отчета и его форма. Отчет по лабораторной работе должен состоять из:
1. Названия лабораторной работы.
2. Цели и содержания лабораторной работы.
3. Ответов на контрольные вопросы лабораторной работы.
4. Формулировки индивидуальных заданий и порядка их выполнения.
Отчет о выполнении лабораторной работы в письменном виде сдается преподавателю.
Вопросы для защиты работы
1. Характеристика видов строк в языке С++.
2. Как описываются строки?
3. Охарактеризуйте способы ввода-вывода строк.
4. Что делают функции gets () и puts ()?
5. Каким образом выполняется операция присваивания при работе со строками?
6. Какие функции предоставляет библиотека ? Какие действия они выполняют?
7. Охарактеризуйте способы ввода-вывода символов.
8. Какая функция используетя для многократного поиска вхождения подстроки?
9. Для чего нужна функция strtok?
10. Какие значения может принимать параметр org?
11. Какие действия необходимо выполнить, чтобы вывести результаты выполнения программы не на экран, а в файл?
Пример выполнения лабораторной работы №8:
1. Индивидуальное задание №1:
1.1. Постановка задачи:
Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие запятые.
1.2. UML-диаграмма:
1.3. Листинг программы:
// Лабораторная работа №8
// Индивидуальное задание №1
Источник: mybiblioteka.su
Написать программу которая считывает из текстового файла три предложения
for ( j — n: n — i + 1:
fin.closeO: cout endl: return 0:
Для определения длины файла используются методы seekg и tel Ig класса i f stream. С любым файлом при его открытии связывается так называемая текущая позиция чтения или записи. Когда файл открывается для чтения, эта позиция устанавливается на начало файла. Для определения длины файла мы перемещаем ее на конец файла с помощью метода seekg (оператор 1), а затем с помощью tel Ig получаем ее значение, запомнив его в переменной len (оператор 2).
Метод seekg (offset. org) перемещает текущую позицию чтения из файла на offset байтов относительно org. Параметр org может принимать одно из трех значений:
i OS:: beg — от начала файла;
iOS:: cur — от текущей позиции;
i OS:: end — от конца файла.
beg. cur и end являются константами, определенными в классе i os, предке i f stream, a символы :: означают операцию доступа к этому классу.
В операторе 3 выделяется len + 1 байтов под символьную строку buf, в которой будет храниться текст из файла. Мы выделяем на один байт больше, чем длина файла, чтобы после считывания файла записать в этот байт нуль-символ.
Для чтения информации требуется снова переместить текущую позицию на начало файла (оператор 4). Собственно чтение выполняется в операторе 5 с помощью метода read( buf. 1 en), который считывает из файла 1 en символов (или менее, если конец файла встретится раньше) в символьный массив buf.
В операторе 6 определяются служебные переменные. В переменной п будет храниться позиция начала текущего предложения, переменная i используется для просмотра массива, переменная j — для вывода предложения.
Цикл просмотра массива buf (оператор 7) завершается, когда встретился нуль-символ. Если очередным символом оказался вопросительный знак (оператор 8), выполняется вывод символов, начиная с позиции п до текущей, после чего в переменную п заносится позиция начала нового предложения.
Оператор 9 (закрытие потока) в данном случае не является обязательным, так как явный вызов с1 ose() необходим только тогда, когда требуется закрыть поток раньше окончания действия его области видимости.
Если требуется вывести результаты выполнения программы не на экран, а в файл, в программе следует описать объект класса выходных потоков ofstream, а затем использовать его аналогично другим потоковым объектам, например:
ofstream fout( textout.txt ):
Если требуется закрыть поток раньше окончания действия его области видимости, используется метод close:
При выполнении некоторых заданий этого семинара может потребоваться посимвольное чтение из файла. При использовании потоков оно выполняется с помощью метода get О. Например, для программы, приведенной выше, посимвольный ввод выглядит следующим образом:
whileCCbufCi] — fin.getO) !- EOF)
Надо учитывать, что посимвольное чтение из файла гораздо менее эффективно. В заключение приведем вариант решения этой же задачи с использованием вместо потоковых классов библиотечных функций, унаследованных из языка С.
fin — fopenC text. txt . r ): III
fseekCfin. 0. SEEKJND):
long len — ftell(fin):
char *buf — new char [len + 1]:
const int l block — 1024:
int num block — len / l block:
fseekCfin. 0. SEEKJET):
fread(buf. l block. num block + 1. fin):
long n — 0. i — 0. j — 0: while(buf[i3) < if( buf[i] — ? )
if ( bufCi] =- . .buf[i] — ! ) n = i + 1; i++:
fclose(fin): printf( n ): return 0:
В операторе 1 определяется указатель на описанную в заголовочном файле структуру FILE. Указатель именно такого типа формирует функция открытия файла fopen. Ее вторым параметром задается режим открытия файла. В данном случае файл открывается для чтения (г).
Файл можно открыть в двоичном (Ь) или текстовом (t) режиме. Эти символы записывают во втором параметре, например, гЬ или rt . Двоичный режим означает, что символы перевода строки и возврата каретки (0x13 и 0x10) обрабатьйа-ются точно так же, как и остальные. В текстовом режиме эти символы преобразуются в одиночный символ перевода строки. По умолчанию файлы открываются в текстовом режиме.
Для позиционирования указателя текущей позиции используется функция f seek с параметрами, аналогичными соответствующему методу потока (операторы 3 и 7). Константы, задающие точку отсчета смещения, описаны в заголовочном файле и имеют имена:
SEEKSET — от начала файла;
SEEK CUR — от текущей позиции;
SEEKEND — от конца файла.
Чтение из файуа выполняется функцией freadCbuf. size. num. file) блоками по si ze байт. Требуется также задать количество блоков num. В программе размер блока задан в переменной 1 Ы оск равным 1024, поскольку размер кластера кратен степени двойки. В общем случае чем более длинными блоками мы читаем информацию, тем быстрее будет выполнен ввод.
Для того чтобы обеспечить чтение всего файла, к количеству блоков добавляется 1 для округления после деления. Вывод на экран выполняется посимвольно с помощью функции putchar. Если требуется с помощью функций библиотеки вывести результаты выполнения программы не на экран, а в файл, в программе следует описать указатель на структуру FILE, с помощью функции fopen открыть файл для записи (второй параметр функции — w), а затем использовать этот указатель в соответствующих функциях вывода, например:
fout — fopen( textout.txt . w ):
putc(bufU]. fout): или 5)utc(buf[j]. fout): После окончания вывода файл закрывается с помощью функции fclose: fclose(fout):
Функции вывода в файл описаны в Учебнике на с. 90 и 411. Смешивать в одной программе ввод-вывод с помощью потоковых классов и с помощью функций библиотеки не рекомендуется.
В целом программа, написанная с использованием функций библиотеки, может получиться более быстродействующей, но менее безопасной, поскольку программист должен сам заботиться о большем количестве деталей. Давайте повторим основные моменты этого семинара.
1. Длина динамической строки может быть переменной. Динамические строки нельзя инициализировать при создании.
2. Длина нединамической строки должна быть константным выражением.
3. При задании длины строки необходимо учитывать завершающий нуль-символ.
4. Присваивание строк выполняется с помощью функций библиотеки.
5. Для консольного ввода-вывода строк используются либо объекты cin и Cout. либо функции библиотеки gets, scanf и puts, printf.
6. Ввод-вывод из файла может выполняться с помощью либо объектов классов ifstream и of stream, либо функций библиотеки fgets, f scanf и fputs, fprintf.
7. Ввод строки с помощью операции выполняется до первого пробельного символа. Для ввода строки, содержащей пробелы, можно использовать либо методы getl ine или get класса i stream, либо функции библиотеки gets и scanf.
8. Смешивать в одной программе ввод-вывод с помощью потоковых классов и с помощью функций библиотеки не рекомендуется.
9. Посимвольное чтение из файла неэффективно.
10. Разбивайте написание программы на последовательность шагов.
11. Выход за границы строки и отсутствие нуль-символа являются распространенными причинами ошибок в программах.
12. Средства, предоставляемые языком, влияют на алгоритм решения задачи, и поэтому перед тем, как продумывать алгоритм, необходимо эти средства изучить.
13. Профамма, написанная с использованием функций, а не классов ввода-вывода, может получиться более быстродействующей, но менее безопасной.
14. Недостатком С-строк по сравнению с классом stri ng является отсутствие проверки выхода строки за пределы отведенной ей памяти.
Задания Вариант 1
Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.
Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово.
Задания на строки, приведенные в Учебнике на с. 159. рассчитаны на использование функций позиционирования курсора на 3iq>aHe и управления цветом символа и фона. Эти функции не поддерживаются стандартом, но входят в состав большинства старых оболочек, например Borland С++ 3.1 или Microsoft Quick С.
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.
Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не более чем четырех букв.
Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.
Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного количества слов.
Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.
Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.
Написать программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед которым могут находиться только пробельные символы.
Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с гласной буквы, на прописную.
Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от О до 9 на слова ноль , один , девять , начиная каждое предложение с новой строки.
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.
Написать программу, которая считывает текст из файла и выводит его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введенное с клавиатуры слово.
Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратном порядке.
Написать программу, которая считывает текст из файла и выводит на экран сначала предложения, начинающиеся с однобуквенных слов, а затем все остальные.
Написать программу, которая считывает текст из файла и выводит на экран предложения, содержащие максимальное количество знаков пунктуации.
Источник: www.pmbk.ru