![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 879; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.38.137 (0.014 с.) |