Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Некоторые Стандартные функции работы со трокамиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
1.4.1 <string.h> (<cstring>) – функции работы со строками в стиле C
char *strcat(char *s1, char *s2); Складывает строки Функция добавляет 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. Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++. Для этого необходимо проделать следующие шаги:
Почему необходимо создавать объект класса ofstream, а не класса ifstream? Потому, что нужно сделать запись в файл, а если бы нужно было считать данные из файла, то создавался бы объект класса ifstream.
Назовём объект – fout, Вот что получится:
Для чего нам объект? Объект необходим, чтобы можно было выполнять запись в файл. Уже объект создан, но не связан с файлом, в который нужно записать строку.
Через операцию точка получаем доступ к методу класса open(), в круглых скобочках которого указываем имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий файл будет заменен новым. Итак, файл открыт, осталось записать в него нужную строку. Делается это так:
Используя операцию передачи в поток совместно с объектом fout строка Работа с файлами в С++ записывается в файл. Так как больше нет необходимости изменять содержимое файла, его нужно закрыть, то есть отделить объект от файла.
Итог – создан файл со строкой Работа с файлами в С++. Объединим весь код и получим следующую программу. #include <fstream> using namespace std;
int main(int argc, char* argv[]) { ofstream fout("cppstudio.txt"); // создаём объект класса ofstream для записи и связываем его с файлом cppstudio.txt fout << "Работа с файлами в С++"; // запись строки в файл fout.close(); // закрываем файл system("pause"); return 0; }
Осталось проверить правильность работы программы, а для этого открываем файл cppstudio.txt и смотрим его содержимое, должно быть — Работа с файлами в С++. Для того чтобы прочитать файл понадобится выполнить те же шаги, что и при записи в файл с небольшими изменениями:
#include <fstream> #include <iostream> 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"; // сообщить об этом else { fin >> buff; // считали первое слово из файла cout << buff << endl; // напечатали это слово
fin.getline(buff, 50); // считали строку из файла fin.close(); // закрываем файл cout << buff << endl; // напечатали эту строку } system("pause"); return 0; }
В программе показаны два способа чтения из файла, первый – используя операцию передачи в поток, второй – используя функцию getline(). В первом случае считывается только первое слово, а во втором случае считывается строка, длинной 50 символов. Но так как в файле осталось меньше 50 символов, то считываются символы включительно до последнего. Обратите внимание на то, что считывание во второй раз (строка 17) продолжилось, после первого слова, а не с начала, так как первое слово было прочитано в строке 14. Результат работы программы показан на рисунке 1. Рисунок 1 — Работа с файлами в С++ Режимы открытия файлов Режимы открытия файлов устанавливают характер использования файлов. Для установки режима в классе ios_base предусмотрены константы, которые определяют режим открытия файлов (см. Таблица 1).
Режимы открытия файлов можно устанавливать непосредственно при создании объекта или при вызове функции open().
Режимы открытия файлов можно комбинировать с помощью поразрядной логической операции или |, например: 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)вывести на экран предложения, содержащие максимальное количество знаков пунктуации */
#include <iostream> #include <fstream> #include <Windows.h>
using namespace std; struct Sentence { char senten[400]; int count; };
void main() { SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода ifstream ifs("input.txt "); // if (!ifs.is_open()) // если файл не открыт cout << "Файл не может быть открыт!\n"; // сообщить об этом else { char delim[] = ".!?", punktuation[] = ",:;-'"; int length; char * buffer; // Получаем длину файла: ifs.seekg(0, ios::end); length = ifs.tellg(); ifs.seekg(0, ios::beg);
// Выделяем память соответственно размеру файла: buffer = new char[length]; //Выделяем память для массива структур, где будем хранить каждое предложение и кол-во пунктуаций в ней. Sentence *arrSentence = new Sentence[length / 100 + 10]; // считываем данные в буфер одним блоком: ifs.read(buffer, length); ifs.close();//закрываем файл
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);//копируем предложение в массив
int count = 0; if (strtok_s(token1, punktuation, &next_token2)!= NULL) { count = 1; while (strtok_s(NULL, punktuation, &next_token2)!= NULL) count++; } arrSentence[n++].count = count;
//ищем максимальное кол-во пунктуаций в предложениях 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) cout << arrSentence[i].senten; delete[] arrSentence; delete[] buffer; } cout << endl; system("pause"); } Лабораторная работа № 11. Работа со строками в C++. Потоки ввода-вывода. Файловые операции Цель и порядок работы Цель работы – ознакомиться с возможностями ввода-вывода языка C++, освоить основные операции работы со строками и файлами.
Порядок выполнения работы: - ознакомиться с описанием лабораторной работы; - получить задание у преподавателя, согласно своему варианту; - написать программу и отладить ее на ЭВМ; - оформить отчет. Контрольные вопросы 1. Какие виды строк существуют в C++? 2. Как объявить C-строку? 3. Как осуществляется ввод-вывод строк? 4. Какие операции над строками вы знаете? 5. Перечислите операции над символами? 6. Перечислите стандартные потоки ввода-вывода? 7. Как создать файловый поток? 8. Какие режимы открытия файлов существуют? 9. Что такое двоичный режим ввода-вывода? 10. Что такое текстовый режим ввода-вывода? 11. Как осуществляется чтение символов и строк? 12. Как изменить текущую позицию в файле? 13. Как узнать текущую позицию в файле? 14. Для чего используется метод clear()? Варианты заданий Вариант 1 Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке.
Вариант 2 Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово.
Вариант 3 Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа.
Вариант 4 Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв.
Вариант 5 Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.
Вариант 6 Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
Вариант 7 Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих не более чем из четырех букв.
Вариант 8 Написать программу, которая считывает текст из файла и выводит на экран только цитаты, то есть предложения, заключенные в кавычки.
Вариант 9 Написать программу, которая считывает текст из файла и выводит на экран только предложения, состоящие из заданного количества слов.
Вариант 10 Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.
Вариант 11 Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.
Вариант 12 Написать программу, которая считывает текст из файла и выводит на экран только предложения, начинающиеся с тире, перед которым могут находиться только пробельные символы.
Вариант 13 Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с гласной буквы, на прописную.
Вариант 14 Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до 9 на слова «ноль», «один»,..., «девять», начиная каждое предложение с новой строки.
Вариант 15 Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
Вариант 16 Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.
Вариант 17 Написать программу, которая считывает текст из файла и выводит его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введенное с клавиатуры слово.
Вариант 18 Написать программу, которая считывает текст из файла и выводит на экран все его предложения в обратном порядке.
Содержание отчета 1) Титульный лист. 2) Наименование и цель работы. 3) Краткое теоретическое описание. 4) Задание на лабораторную работу. 5) Схема алгоритма. 6) Листинг программы. 7) Результаты выполнения программы.
|
||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-12-11; просмотров: 865; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.105.85 (0.009 с.) |