Описания, использующие спецификаторы auto, static и register также служат определениями тем, что они вызывают резервирование соответствующего объема памяти.
Описание register лучше всего представить как описание auto (автоматический) с подсказкой компилятору, что описанные переменные усиленно используются. Подсказка может быть проигнорирована. К ним не может применяться операция получения адреса &.
Спецификаторы auto или register могут применяться только к именам, описанным в блоке, или к формальным параметрам. Внутри блока не может быть описаний ни статических функций, ни статических формальных параметров.
Некоторые спецификаторы могут использоваться только в описаниях функций:
Спецификатор перегрузки overload делает возможным использование одного имени для обозначения нескольких функций;
Спецификатор inline является только подсказкой компилятору, не влияет на смысл программы и может быть проигнорирован. Он используется, чтобы указать на то, что при вызове функции inline- подстановка тела функции предпочтительнее обычной реализации вызова функции.
Объявление переменных на глобальном уровне. Инициализация глобальных и локальных переменных.
30. Стоки в С++. Способы реализации строковых переменных. Строковый тип данных.
31.Инициализация символьной строки в С++. Передача строк в функцию. Встроенный строковый тип.
Для инициализации символьной строки при объявлении укажите требуемую строку внутри двойных кавычек, как показано ниже:
char title[64] = "Учимся программировать на языке C++";
Если количество символов, присваиваемое строке, меньше размера массива, большинство компиляторов C++ будут присваивать символы NULL остающимся элементам строкового массива.
ПЕРЕДАЧА СТРОК В ФУНКЦИИ
Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки.
Так как символ NULL указывает конец строки, функция не требует параметр, который задает количество элементов в массиве. Вместо этого функция может определить последний элемент, просто найдя в массиве символ NULL.
Символ NULL используется для определения конца строки.
32. Класс string в С++. Функции для работы со строками.
Для работы со строками подключите модуль string.h.
1. strcat ( char * dest , const char * src ); - эта функция добавляет (копирует) в конец первой строки содержимое второй. У этой функции два параметра типа указатель на строку. Пример:
#include <string.h>
#include <iostream.h>#include <conio.h>
void main(){
char a[20]="hello", c[]=" from the srr";
strcat(a,c);
cout<< a<<', '<< c<<' '<< "\n"; // выведет hello from the srr, from the srr
getch ();}
2. strcmp ( const char * s 1, const char * s 2) – эта функция сравнивает две строки, а возвращаемое значение надо понимать следующим образом:
меньше нуля если s1 < s2
равно нулю если s1 == s2
больше нуля если s1 > s2
Понятие больше, меньше или равно применяется в соответствии с кодами букв входящих в состав строк, т.е. сравниваются первые буквы (их коды ), если они равны, то сравниваются последующие, до тех пор пока не будут найдены различные и на основе сравнения различных букв выводится результат сравнения строк. Обычно сравнивают строки на предмет равенства, и не интересуются тем, какая больше, например:
char a [20], c [20];
cout<<"\n Введите две строки ";
cin>>a>>c;
if (strcmp(a,c))
cout<<"Строки не равны"<< "\n"; //выведет при разных строках "Строки не равны"
3. strcpy(char *dest, const char *src)- копирует содержимое второй строки в первую:
char string[10];
char *str1 = "abcdefghi";
strcpy(string, str1);
cout<< string; // выведет "abcdefghi"
4. strstr(const char *s1, const char *s2) - осуществляет поиск первого вхождения подстроки в строку, возвращает соответствующий указатель на место в исходной строке:
char a[20]="1234567891011121314", c[]="34";
cout<< "\n"<< strstr(a,c); // выведет 34567891011121314
5. strlen(const char *s)- возвращает длину переданной строки.
char string[10];
char *str1 = "abcdef";
cout << strlen ( str 1); //выведет 6
6. sprintf() - эта функция объявлена в файлах CONIO.H, STDIO.H. Эта функция формирует строку на основе переменного числа параметров.
Пример: char r[50],s[]="string";
int i=1;
float f=1.34;
sprintf(r," Это результирующая строка : s:%s,%c, i:%d,f:%f или %d",s,s[2],i,f,f);
cout<< r;
33. Работа со строками в С++: символьный ввод/вывод, ввод/вывод строки.
Переменные символьного типа имеют тип char. Он обычно используют для хранения символа. Символы в компьютере хранятся в виде целых чисел, которые представляют собой код из таблицы символов ASCII. При выводе на экран символьных переменных и констант компьютер выводит соответствующий коду символ. Присваивать переменной типа char значения можно следующим образом:
char s;
s='a';
s=32;
s='\b'
В диапазон типа char входят числа от -128 до 127, коды русских букв имеют код больше 127, для решения этой проблемы используйте тип unsigned char.
В языке С++ нет стандартного типа для работы со строками. для этих целей используется массив символов:
unsigned char s[10]="Привет";
Символьные строки описываются как обычные массивы:
char phrase [17];
При использовании массива символов в качестве строки необходимо помнить, что концом строки считается символ '\0' (т.е. 0). Все стандартные функции корректно вставляют 0 в конец строки, но если вы будите, что либо менять, не забывайте ставить "\0" в конце строки.
Массивы можно полностью или частично проинициализировать непосредственно в операторе описания. Список значений элементов массива заключается в фигурные скобки "{}". Например, оператор
char phrase [17] = { 'В','в','е','д','и','т','е',' ','в','о','з','р','а','с','т',':', '\0' };
одновременно и объявляет массив "phrase", и присваивает его элементам значения.
Очень важно запомнить, что символьные строки хранятся в виде массивов. Поэтому их нельзя приравнивать и сравнивать с помощью операций "=" и "==".
Для копирования и сравнения строк следует применять специальные библиотечные функции.
Если требуется ввести строку, состоящую из нескольких слов, в одну строковую переменную, используются методы getline или get класса iostream.
34. Работа с файлами в С++: вывод в файловый поток, чтение их входного файлового потока.
На дисках данные хранятся в виде структур данных, обслуживаемых операционной системой, – в виде файлов. Файл проще всего представить как линейную последовательность символов.
Перед началом изучения файловых операций в Си++, необходимо ознакомиться с понятием потока ввода/вывода. Поток напоминает "канал" или "трубу", через которую данные поступают от передатчика к приемнику. Исключительно важная особенность потоковой обработки данных состоит в том, что элементы данных можно посылать или считывать из потока только по одному за раз, т.е. последовательно.
Из программы данные можно отправить (записать) в поток вывода, а получить (прочитать) их в программе из потока ввода. Например, сразу после запуска программы, поток стандартного ввода "cin" подключается к клавиатуре, а поток стандартного вывода "cout" – к экрану.
Список функций для работы с файловыми потоками хранится в заголовочном файле "fstream.h". Поэтому во всех рассматриваемых ниже фрагментах программ предполагается, что в начале программы есть соответствующая директива "#include":
#include<fstream.h>. В программе перед первым обращением к потоку ввода или вывода необходимо "создать" поток. Операторы для создания потоков похожи на описания переменных, и они обычно размещаются в начале программы или функции рядом с описаниями переменных. Например, операторы ifstream in_stream;
ofstream out_stream;
создают поток с именем "in_stream", являющийся объектом класса (как типа данных) "ifstream" (input-file-stream, файловый поток ввода), и поток с именем "out_stream", являющийся объектом класса "ofstream" (output-file-stream, файловый поток вывода).
После создания потока его можно подключить к файлу (открыть файл) с помощью функции open(...). Функция "open(...)" у потоков ifstream и ofstream работает по-разному. Для подключения потока ifstream с именем "in_stream" к файлу с именем "Lecture.txt" надо применить следующий вызов:
in_stream.open("Lecture.txt");
Чтобы к файлу "Lecture.txt" подключить поток вывода ofstream с именем "out_stream", надо выполнить аналогичный оператор:
out_stream.open("Lecture.txt");
Этот оператор подключит поток "out_stream" к файлу "Lecture.txt", но при этом прежнее содержимое файла будет удалено. Файл будет подготовлен к приему новых данных. Для отключения потока "in_stream" от файла, к которому он подключен (для закрытия файла), надо вызвать функцию close():
in_stream.close();
35. Работа с файлами в С++: определение конца файла, проверка ошибок при выполнение файловых операций, закрытие файла.
Для отключения потока "in_stream" от файла, к которому он подключен (для закрытия файла), надо вызвать функцию close():
in_stream.close();
Функция отключения от файла у потока вывода:
out_stream.close();
выполняет аналогичные действия, но, дополнительно, в конец файла добавляется служебный символ "end-of-file (маркер конца файла)". Т.о., даже если в поток вывода не записывались никакие данных, то после отключения потока "out_stream" в файле "Lecture.txt" будет один служебный символ. В таком случае файл "Lecture.txt" останется на диске, но он будет пустым.
Файловые операции, например, открытие и закрытие файлов, известны как один из наиболее вероятных источников ошибок. В надежных коммерческих программах всегда выполняется проверка, успешно или нет завершилась файловая операция. В случае ошибки вызывается специальная функция-обработчик ошибки.
Простейший способ проверки ошибок файловых операций заключается в вызове функции fail(). Вызов
in_stream.fail();
возвращает истинное значение (True), если последняя операция потока "in_stream" привела к ошибке (может быть, была попытка открытия несуществующего файла). После ошибки поток "in_stream" может быть поврежден, поэтому лучше не продолжать работу с ним.
В приведенном ниже фрагменте программы в случае ошибки при открытии файла на экран выдается сообщение и программа завершает работу с помощью библиотечной функции "exit()" (она описана в файле "stdlib.h"):
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <conio.h>
int main() {
ifstream in_stream;
in_stream.open( "Lecture.txt" );
if ( in_stream.fail() ) {
cout << "Извините, открыть файл не удалось!\n";
getch ();
exit(1);}
36. Работа с файлами в С++: управление открытием файла, символьный ввод/вывод, ввод/вывод строки.
В программе перед первым обращением к потоку ввода или вывода необходимо "создать" поток. Операторы для создания потоков похожи на описания переменных, и они обычно размещаются в начале программы или функции рядом с описаниями переменных. Например, операторы
ifstream in_stream;
ofstream out_stream;
создают поток с именем "in_stream", являющийся объектом класса (как типа данных) "ifstream" (input-file-stream, файловый поток ввода), и поток с именем "out_stream", являющийся объектом класса "ofstream" (output-file-stream, файловый поток вывода).
После создания потока его можно подключить к файлу (открыть файл) с помощью функции open(...). Функция "open(...)" у потоков ifstream и ofstream работает по-разному.
Для подключения потока ifstream с именем "in_stream" к файлу с именем "Lecture.txt" надо применить следующий вызов:
in_stream.open("Lecture.txt");
Функция ввода get()
После того, как файл для ввода данных открыт, из него можно считывать отдельные символы. Для этого служит функция get(). У нее есть параметр типа char&. Если программа находится в начале файла, то после вызова:
in_stream.get(ch);
переменной "ch" будет присвоено значение первой буквы файла и поток "in_stream" будет подготовлен для чтения следующего символа.
Функция вывода put()
С помощью потока вывода класса ofstream в открытый файл можно записывать отдельные символы. Для этого у класса ofstream есть функция put(). Записываемый символ передается ей как параметр типа "char".
Дата: 2019-12-10, просмотров: 272.