Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2009 лекции ПЯВУ часть1.doc
Скачиваний:
38
Добавлен:
27.03.2015
Размер:
823.3 Кб
Скачать

Получение строки от пользователя

При чтении с экрана строки используется объект cinтак же, как и при чтении переменных другого типа. Но чтение при этом происходит до первого символа-разделителя. К символам разделителям относится и пробел. Это значит, что от пользователя будет получена не вся строка целиком, а только первое слово. Чтобы получить всю строку, нужно воспользоваться функциейgetline, определенной в объектеcin(рис. 7.7). Перед использованием этой функции нужно убедиться, что под строку выделена память.

#include <iostream>

using namespace std;

int main()

{

char str[255];

cout<<"Enter a string"<<endl;

cin.getline(str, 255);

cout<<str<<endl;

return 0;

}

Рис. 7.7. Получение строки от пользователя

7.2. Работа со строками в С++

В С++ существует более простой способ работы со строками [2]. Нужно подключить заголовочный файл stringи использовать стандартное пространство имен, где определен типstring. И теперь строка – это не массив символов, а новый тип данных.

Пример работы с такой строкой представлен на рис. 7.8.

#include <iostream>

#include <string>

using namespace std;

int main(){

string s0 = "abcde"; //создаем переменную типа string

string s1 = "fg"; //создаем еще одну переменную типа string

// Конкатенация двух строк.

string s = s0 + s1;

cout<<s<<"\n";

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

char ch0 = s0.at(1); //получаем второй символ строки

cout<<ch0<<"\n";

char ch1 = s0[3]; //получаем четвертый символ строки

cout<<ch1<<"\n";

// Выясняем, не пустая ли строка

if (s0.empty()){

cout << "String is empty"<<"\n";

}

else{

cout << "String isn't empty"<<"\n";

}

// Обмен значения двух строк

swap(s0, s1); //функция обмена двух переменных

// Присваиваем и сравниваем 2 строки

s1 = s0; //возможно прямое присваивание двух строк

if(s1 == s0) {//и сравнение двух строк как обычных переменных

cout << "Strings are equal"<<"\n"; }

else{

cout << "Strings are not equal"<<"\n"; }

// Чтение введенной с клавиатуры строки

getline(cin, s1);

cout<<s1;

// Получение длины строки

cout<<s1.length();

return 0;

}

Рис. 7.8. Использование строк в С++

Тема 8 Работа с файлами

Все до сих пор написанные программы читали из стандартного ввода и писали в стандартный вывод [11], относительно которых предполагалось, что они магическим образом предоставлены программе местной операционной системой.

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

Открытие файла

Для начала работы с файлом его необходимо открыть. Делает это функция fopenбиблиотекиstdio.h

FILE * fopen(char * filename, char * type);

Функция fopenоткрывает файл, именованный параметромfilename, и связывает его с соответствующим потокомstream. Функцияfopenв качестве результата возвращает адресный указатель, который будет идентифицировать потокstreamв последующих операциях. Строкаtype, используемая в функцииfopen,может принимать следующие значения:

r- открытие файла только для чтения;

w- создание файла для записи;

а- присоединение; открытие для записи в конец файла или создание для записи, если файл не существует;

r+- открытие существующего файла для обновления (чтения и записи);

w+- создание нового файла для изменения;

a+- открытие для присоединения; открытие (или создание, если файл не существует) для обновления в конец файла.

Если данный файл открывается или создается в текстовом режиме, то можно приписать символ tк значению параметраtype(rt,w+t, и т.д.); аналогично, для спецификации бинарного режима можно к значению параметраtypeдобавить символb(wb,a+b, и т.д.). Если в параметреtypeотсутствуют символыtилиb, режим будет определяться глобальной переменной_fmode. Если переменная_fmodeимеет значениеO_BINARY, файлы будут открываться в бинарном режиме, иначе, если_fmodeимеет значениеO_TEXT, файлы открываются в текстовом режиме. Данные константыO_...определены в файлеfcntl.h.

При успешном завершении fopenвозвращает указатель на открытый потокstream. В случае ошибки функция возвращает нуль (NULL).