Главная страница

Указатель на char, а затем выделить память с помощью new или malloc (первый способ предпочтительнее)


Скачать 31.92 Kb.
НазваниеУказатель на char, а затем выделить память с помощью new или malloc (первый способ предпочтительнее)
Дата20.03.2022
Размер31.92 Kb.
Формат файлаdocx
Имя файла17.03.22 lesson 6.docx
ТипУказатель
#405246

Описание строки

Память под строки может выделяться как компилятором, так и непосредственно в программе. Удобно задавать длину строки с помощью именованной константы, поскольку такой вариант лучше читается, во-первых, а во-вторых, при возможном изменении длины строки потребуется изменить программу только в одном мести

Const int len_str=80;

Char str[len_str];

При задании длины необходимо учитывать завершающий нуль-символ. Например, в строке, приведенной выше, можно хранить не 80 символов, а только 79.

Строки можно при описании инициализировать строковыми константами, при этом нуль-символ в позиции, следующей за последним заданным символом, формируется автоматически.

Если строка при определении инициализируется, ее размерность можно опускать (компилятор сам выделит память, достаточную для размещения всех символов строки и завершающего нуля):

Char a[]=”Never trouble trouble”; // 22 simvols

Для размещениястроки в динамической памяти надо описать указатель на char, а затем выделить память с помощью new или malloc (первый способ предпочтительнее);

В этом случае длина строки может быть переменной и задаваться на этапе выполнения программы. Динамические строки, как и другие динамические массивы, нельзя инициализировать при создании. Оператор char *str=”Functions are used for putting a place in order” создает не строковую переменную, а указатель на строковую переменную, которую изменить невозможно.

Ввод-вывод строк

#include

Int main(){

Const int n=80;char s[n]; cin>>s; cout<
Если запустить программу и ввести строку, состоящую из одного слова. Вывелось правильно.

Если запустить программу и ввести строку, состоящую из нескольких слов, то выводится только первое слово, так как ввод выполняется до первого пробельного символа.

Можно ввести слова входной строки в отдельные строковые переменные:

#include

Int main(){

Const int n=80;char s[n], t[n], r[n]; cin>>s>>t>>r; cout<
Если требуется ввести строку, состоящую из нескольких слов, в одну строковую переменную, используются методы getline или get класса istream, объектом которого является cin. Синтаксис вызова метода = после имени обоъекта ставится точка, а затем пишется имя метода:

#include

Int main(){

Const int n=80;char s[n];

cin.getline(s,n); cout<
Cin.get(s,n);cout<
return 0;}

задача 1. Написать программу, которая определяет, встречается ли в заданном текстовом файле заданная последовательность символов. Длина строки текста не превышает 80 символов, текст не содержит переносов слов, последовательность не содержит пробельных символов.

Исходные данные и результаты

1.Исходные данные: поскольку по условию переносы отсутствуют, можно ограничиться переносом в каждой строке отдельно. То есть нужно помнить только одну текущую строку файла. Для ее хранения выделяется строковая переменная длиной 81 символ.

2. последовательность символов для поиска, вводимая с клавиатуры. Поскольку по условию задачи она не содержит пробельных символов, ее длина не должна быть более 80 символов. Для ее хранения выделяется строковая переменная длиной 81 символ.

Результатом работы является сообщение либо о наличии заданой последовательности, либо ее отсутствии.

Алгоритм решения задачи

  1. Построчно считывать текст из файла.

  2. Для каждой строки проверять, содержится ли в ней заданная последовательность.

  3. Если да, напечатать соощение о наличии заданной последовательности и завершить программу.

  4. При нормальном выходе из цикла напечатать сообщение об отсутствии заданной последовательности и завершить программу.

#include

#include

#include

Int main(){

Const int len=81;

Char word[len];

Cout<<”vvesti slovo dly poiska ”; cin>>word;

Ifstream fin(“text.txt’,ios::in| ios::nocreate);

If (!fin){cout<<”mistakes of opening file”<
While (fin.getline(line,len)) {

If strstr(line, word) {

Cout<<”prisutstvuet!” <
Cout<<”otsutstvuet!” <
Return 0;

}

Структуры

Структура в С++ обладают практически теми же возможностями, что и классы. В структуру, в противоположность массиву, можно объединять данные различных типов.

Например, требуется обработать информацию о расписании работы конференцзала. Для каждого мероприятия надо знать время, тему, фамилию организатора и количество участников. Поскольку вся эта информация относится к одному событию, логично дать ему имя, что впоследствии можно было к нему обращаться.

Описывается новый тип данных:

Struct Event{

Int hour, min;

Char theme[100], name[100];

Int num;}

Имя этого типа данных – Event. Можно описать переменные этого типа:

Event e1,e2[20];

Элементы структуры называются полями. Поля могут быть любого типа. Для обращения к полю используется операция выбора: (.) точка для переменной и -> для указателя.

Например, e1.hour=12; e1.min=30.

Задача 2. В текстовом файле хранится база отдела кадров предприятия. На предприятии 100 сотрудников. Каждая строк файла содержит запись об одном сотруднике. Формат записи: фио (30 поз. Фамилия должна начинаться с первой позиции), год рождения (5 поз) оклад (10 поз). Написать программу, которая по заданной фамилии выводит на экран сведения о сотруднике, подсчитывая средний оклад всех запрошенных сотрудников.

cin.getline(s,n); cout<
Cin.get(s,n);cout<
return 0;}


написать администратору сайта