Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы.docx
Скачиваний:
343
Добавлен:
22.03.2016
Размер:
1.03 Mб
Скачать

63. Определение фактической длины строки

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

Функция strlen(char *s) – возвращает фактическую длину текстовой строки, хранящейся в символьном массиве s (см. аналог my_StrLen(char *S)).

Функция определения фактической длины строки (с нулевым символом):

unsigned my_StrLen(char *S)

{

unsigned L = 0;

while (S[L]) // При достижении символа с числовым значением 0 выход из цикла

++L;

return L;

}

64. Копирование символьных строк

65. Основные функции обработки строк библиотеки cstring

Функция strlen(char *s) – возвращает фактическую длину текстовой строки, хранящейся в символьном массиве s (см. аналог my_StrLen(char *S)).

Функция strcpy(char *dest, char *source) – копирует содержимое строки source в строку dest.

Функция strcat(char *s1, char *s2) – добавляет содержимое строки s2 в конец строки s1.

Функция strcmp(char *s1, char *s2) – осуществляет лексикографическое сравнение строк s1 и s2. Возвращает значение 0, если строки одинаковы (равны), значение большее 0 при s1 > s2 и отрицательное значение при s1 < s2.

Пример. Имеются две строки S1 и S2, содержащие некоторые тексты. Необходимо поменять содержимое этих строк так, чтобы строка S2 содержала “больший” текст. Реализация:

char S1 [41], S2 [41], B [41];

cin >> S1;

cin >> S2;

if (strcmp (S1, S2))

{

strcpy(B, S1);

strcpy(S1, S2);

strcpy(S2, B);

}

cout << S1 << endl;

cout << S2 << endl;

В этой же библиотеке содержатся другие варианты упомянутых функций и множество других полезных обработчиков строк.

66. Массивы текстовых строк (двумерные массивы символов)

Массивы текстовых строк

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

char arr_str [30] [21]

Этот массив содержит 30 строк. Каждая строка может содержать текст из максимум 20 символов + нулевой символ.

Для того чтобы обратиться к некоторой строке этого массива достаточно указать только первый индекс. Например:

strcpy (arr_str [10] , “Иванов”);

cout << arr_str [10] << endl; // На экран выведено “Иванов”

Инициализация такого массива:

char arr_str [3] [21] = {“Иванов”, “Петров”, “Сидоров”};

cout << arr_str [1] << endl; // На экране “Петров”

или так:

char arr_str [ ] [21] = {“Иванов”, “Петров”, “Сидоров”};

cout << arr_str [2] << endl; // На экране “Сидоров”

Для получения доступа к отдельным символам строк необходимо указывать два индекса, как в обычном двумерном массиве:

cout << arr_str [2] [2]; // На экране буква ‘д’ из строки “Сидоров”

67. Указатели Понятие указателя

Все данные (переменные, константы и др.) хранятся в памяти. Память представляет собой непрерывную последовательность ячеек (байтов), каждая из которых имеет свой номер – адрес:

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

При определении, например, некоторой переменной, она располагается в памяти по определенному адресу и занимает столько ячеек, сколько требует тип этой переменной. Пусть, например, имеется переменные int A = 2351 и double B = 3.1 и пусть они располагаются в памяти так:

А = 2351

B = 3.14

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

Говорят, что переменная А располагается по адресу 101 и занимает 4 байта, а переменная B имеет адрес 105 и занимает 8 байт памяти.

Для получения адреса какого-либо программного объекта используется оператор &. Например, если выполнить фрагмент следующей программы (в предположении, что переменные A и B располагаются в памяти, как это показано на предыдущем рисунке):

int A = 2351;

double B = 3.14;

cout << “Значение переменной А: ” << A << endl;

cout << “Адрес переменной А: ” << &A << endl;

cout << “Значение переменной В: ” << В << endl;

cout << “Адрес переменной В: ” << &В << endl;

получим следующий результат:

Значение переменной А: 2351

Адрес переменной А: 101

Значение переменной В: 3.14

Адрес переменной В: 105

Правда, значения адресов переменных будут выведены в шестнадцатеричном формате.

Указатели – это тоже обычные переменные, но они служат для хранения адресов памяти.

Указатели определяются в программе следующим образом:

<тип данных> *<имя переменной>

Здесь <тип данных> определяет так называемый базовый тип указателя.

<Имя переменной> является идентификатором переменной-указателя.

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

Например:

int *p1;

double *p2;

Здесь определены две переменные-указатели (или просто – два указателя). Указатель p1 является переменной-указателем на базовый тип int (или, как говорят, переменная p1 указывает на int - значение), а указатель p2 указывает на double – значение.

Иными словами, переменная p1 предназначена для хранения адресов участков памяти, размер которых соответствует типу int (4 байта), а переменная p2 - для хранения адресов участков памяти, размер которых соответствует типу double (8 байт).

Формально указатели представляют собой обычные целые значения типа int и занимают в памяти 4 байта не зависимо от базового типа указателя. Значения указателей при их выводе на экран представляются как целые значения в шестнадцатеричном формате.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]