Programmirovanie_-_1_kurs / Методические указания к лабораторным работам 3-4
.pdfФункция сравнивает строки str1 и str2 и возвращает нулевой результат в случае их совпадения. Если строка str1 предшествует строке str2 в алфавитном порядке, то результат будет отрицательным. Наоборот, если строка str2 опережает строку str1, то результат будет положительным.
char str1[] = "String #1"; char str2[] = "String #2"; int res = strcmp(str1,str2);
cout << strcmp("World", "world"); |
// -1 |
cout << strcmp("world", "world"); |
// 0 |
cout << strcmp("cat", "dog"); |
// -1 |
cout << strcmp("aabaxxx", "aacaxxx"); |
// -1 |
cout << strcmp("aadaxxx", "aacaxxx"); // 1
cout << strcmp("Иванов Иван", |
// 1 |
"Андреев Андрей"); |
Еще одна функция stricmp сравнивает строки без учета регистра:
int stricmp(const char *str1, const char *str2);
Пример:
cout << stricmp("World", "world"); // 0 cout << stricmp("World", "wOrLd"); // 0
Сравнение части строки может выполняться при помощи функции strncmp:
int strncmp(const char *str1, const char *str2, size_t num);
Пример:
cout << strncmp("football", "footstep", 4); // 0
cout << strncmp("football", "footstep", 5); // -1
cout << strncmp("football", "Footstep", 4); // 1
Функция strnicmp делает то же самое, только без учета регистра:
40
int strnicmp(const char *str1, const char *str1, size_t num);
Пример:
cout << strnicmp("football", "Footstep", 4); // 0
5.3.5.Прочие строковые функции
Дополнительные строковые функции, определенные в заголовочном файле string.h приведены в таблице 4.
Таблица 4. Дополнительные строковые функции
Имя |
Описание |
Пример использования |
||
функции |
||||
|
|
|
||
strlwr |
Изменяет |
регистр |
char str[] = "UPPER"; |
|
|
символов на нижний |
strlwr(str2); |
||
|
|
|
cout << str; // "upper" |
|
strupr |
Изменяет |
регистр |
char str[] = "lower"; |
|
|
символов на верхний |
strupr(str); |
||
|
|
|
cout << str; // "LOWER" |
|
strrev |
Переворачивает |
char str[] = "abcdefg"; |
||
|
строку задом наперед |
strrev(str); |
||
|
|
|
cout << str; // "gfedcba" |
|
strset |
Инициализирует |
char str[10] = "abcdef"; |
||
|
строку |
заданным |
strset(str,'?'); |
|
|
символом |
|
cout << str; // "??????" |
|
|
|
|
||
strchr |
Возвращает указатель |
char str[] = "abcd!xyz!qwe"; |
||
|
на первое вхождение |
cout << strchr(str,'!'); |
||
|
заданного |
символа в |
// "!xyz!qwe" |
|
|
if (strchr(str,'$')==NULL) |
|||
|
строку |
|
cout << "Символ $ не найден "; |
|
strrchr |
Возвращает указатель |
char str[] = "abcd!xyz!qwerty"; |
||
|
на |
последнее |
cout << strrchr(str,'!'); |
|
|
вхождение |
заданного |
// "!qwerty" |
|
|
|
|||
|
символа в строку. |
|
||
strstr |
Возвращает указатель |
char str[] = "tennis hockey |
||
|
на первое вхождение |
voleyball pool football"; |
||
|
заданной подстроки в |
cout << strstr(str,"ball"); |
||
|
исходную строку. |
// "ball pool football" |
||
|
|
5.3.6.Преобразование строки в число
Строка может быть преобразована в эквивалентное числовое значение. Данная операция выполняется при
41
помощи специальных функций, определенных в заголовочном файле stdlib.h:
int |
atoi(const |
char |
*str); |
long |
atol(const |
char |
*str); |
double atof(const char *str);
Функция atoi (сокр. от ASCII to integer) преобразует строку str в целое число типа int, atol (сокр. от ASCII to long integer) – в целое число типа long, atof (сокр. от ASCII to float) – в вещественное число double.
В том случае, если преобразование выполнить не удается, функции возвращают нулевое значение.
int |
a |
= atoi("123"); |
// a = 123 |
int |
b |
= atoi("asd"); |
// b = 0 |
double c |
= atol("15.8"); |
// c = 15.8 |
|
double d |
= atol("sa5.8"); |
// d = 0 |
|
char s[] |
= "125"; |
|
|
int |
x = |
atoi(s); // x = 125 |
5.3.7.Преобразование числа в строку
Обратная операция, преобразование числа в строку выполняется при помощи функций itoa, ltoa и gcvt. Данные функции также определены в заголовочном файле stdlib.h
char * itoa(int value, char *str, int radix); char * ltoa(long value, char *str, int radix); char * gcvt(double value, int ndec, char *str);
Функции itoa (сокр. от integer to ASCII) и ltoa (сокр. от long integer to ASCII) преобразовывают соответственно число типа int и long в строку, которая записывается по адресу str. Преобразование выполняется в системе счисления с основанием radix.
char s[20]; int x = 15263;
itoa(x,s,10); // s: "15263"
42
char s[20]; int x = 64;
itoa(x,s,2); // s: "1000000"
char s[20]; int x = 64;
itoa(x,s,16); // s: "40"
Функция gcvt (сокр. от convert, символ g в названии функции определяет формат выходного значения) формирует строку на основе вещественного числа value и записывает ее в строку str. При этом количество знаков ограничивается значением ndec.
char s[20];
double x = 12.876532; gcvt(x,4,s); // s: "12.88" gcvt(x,6,s); // s: "12.8765"
5.3.8. Работа с отдельными символами
К отдельным символам строки можно обращаться как к самостоятельным элементам массива.
Пример 1 (изменение символа):
char s[] = "Предлажение с ошибкой";
s[5] = 'о'; // s: "Предложение с ошибкой"
Пример 2 (извлечение слова из строки):
//Строка Elements содержит несколько слов,
//разделенных пробелом
char Elements[] = "15 10 18 27 35"; // Строка s предназначена для хранения
//отдельного элемента char s[10] = "";
//N - порядковый номер элемента,
//который мы хотим записать в строку s
//(нумерация начинается с нуля)
int N = 2;
// ИТАК, НАЧНЕМ
int cur_el = 0; // текущий элемент
43
// Проходим по всем символам
for (int i=0 ; i<strlen(Elements) ; i++)
{
//Если встретили пробел,
//считаем что перешли к новому элементу if (Elements[i] == ' ')
cur_el++;
//Если текущий элемент не пробел,
//и мы дошли до нужного элемента
else if (cur_el==N)
{
int k = strlen(s); s[k] = Elements[i]; s[k+1] = '\0';
}
}
// Выводим на экран элемент с номером N cout << s; // "18"
6. ЛАБОРАТОРНАЯ РАБОТА №3. Массивы
6.1. Цель работы
Цель настоящей работы – ознакомление с массивами и механизмом динамического выделения памяти.
6.2. Постановка задачи
1.Разработайте программу, выполняющую обработку массивов в соответствии с заданием для вашего варианта. Используйте статическое выделение памяти для массивов.
2.Модифицируйте программу (1), реализовав динамическое выделение памяти для массивов.
6.2.1. Варианты заданий Вариант №1
На основе исходных массивов A и B с рабочим размером n сформировать массив C, элементы которого вычисляются по формуле: Ci = Ai * Bi. Упорядочить массив С по возрастанию, используя метод выбора. Вывести элементы массива С на экран.
44
Массивы A, B и C являются целочисленными. Значение n и значения элементов массива A и B вводятся с клавиатуры. При этом значения элементов внутри массива A не должны повторяться.
Вариант №2
На основе исходных массивов A и B с рабочим размером n сформировать массив C, элементы которого вычисляются по формуле: Ci = Ai + Bi. Упорядочить массив С по возрастанию, используя метод «пузырька». Вывести массивы A, B и С на экран.
Массивы A, B и C состоят из вещественных чисел. Значение n вводится пользователем с клавиатуры. Значения элементов массивов A и B генерируются при помощи датчика случайных чисел. При этом значения элементов внутри массива B не должны повторяться.
Вариант №3
На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел, которые одновременно входят как в массив A, так и в массив B. Упорядочить массив С по возрастанию, используя метод выбора. Вывести элементы массива С на экран.
Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массива A и B вводятся с клавиатуры
Вариант №4
На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел, которые входят в массив A, но при этом не входят в массив B. Упорядочить массив С по возрастанию, используя метод «пузырька». Вывести элементы массива С на экран.
45
Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массива A и B вводятся с клавиатуры.
Вариант №5
На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел, которые входят в массив B, но при этом не входят в массив A. Упорядочить массив
Спо возрастанию, используя метод «пузырька». Вывести элементы массивов A, B и С на экран.
Массивы A, B и C являются целочисленными. Значения m и n вводятся пользователем с клавиатуры. Значения элементов массивов A и B генерируются при помощи датчика случайных чисел.
Вариант №6
На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать двумерный
массив C[n][m], элементы которого будут вычисляться по формуле: Cji = Ai * Bj. Вывести элементы массивов A, B и
Сна экран.
Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массивов A и B вводятся пользователем с клавиатуры. Перед заполнением массива С, следует упорядочить массивы A и B по возрастанию, используя метод выбора.
Вариант №7
На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов) сформировать двумерный массив C[n][m], элементы которого будут вычисляться по формуле: Cji = Ai + Bj. Вывести элементы массивов A, B и С на экран.
Массивы A, B и C содержат вещественные числа. Значения m и n вводятся пользователем с клавиатуры.
46
Значения элементов массивов A и B генерируются при помощи датчика случайных чисел. Перед формированием массива С, следует упорядочить массивы A и B по возрастанию, используя метод «пузырька».
Вариант №8
На основе исходных массивов A и B с рабочим размером n сформировать двумерный массив C[n][n], элементы которого будут вычисляться по формуле: Cji = A2i – B2j. Вывести элементы массивов A, B и С на экран.
Массивы A, B и C содержат целые числа. Значение n вводятся пользователем с клавиатуры. Значения элементов массивов A и B генерируются при помощи датчика случайных чисел.
Вариант №9
На основе исходного двумерного массива С с рабочим размером n х n сформировать массив A с размером n, i-й элемент которого будет равняться сумме элементов i-й
n 1
строки массива C: Ai Cij . Упорядочить массив A по
j 0
убыванию, используя метод «пузырька». Вывести массивы A и С на экран.
Массивы A и C должны содержать целые числа. Значение n вводятся пользователем с клавиатуры. Значения элементов массива С генерируются при помощи датчика случайных чисел.
Вариант №10
На основе исходного двумерного массива С с рабочим размером n х m сформировать массив A с размером n, i-й элемент которого будет равняться произведению
m 1
элементов i-й строки массива C: Ai Cij . Упорядочить
j 0
47
массив A по убыванию, используя метод выбора. Вывести массивы A и С на экран.
Массивы A и C должны содержать вещественные числа. Значения n и m вводятся пользователем с клавиатуры. Значения элементов массива С также вводятся пользователем с клавиатуры.
Вариант №11
На основе исходного двумерного массива С с рабочим размером n х m сформировать массив B с размером n, i-й элемент которого будет равняться среднему арифметическому значению для элементов i-й строки
m 1Cij
массива C: B |
j 0 |
. Упорядочить массив B по |
|
||
i |
m |
|
|
|
возрастанию, используя метод «пузырька». Вывести массивы B и С на экран.
Массив C должен состоять из целых чисел, массив B – из вещественных. Значения n и m, а также значения элементов массива C вводятся пользователем с клавиатуры.
Вариант №12
Используя метод «пузырька», упорядочить по возрастанию значения, содержащиеся в строках двумерного массива C с рабочим размером n х m. Вывести массив C на экран.
Массив C должен состоять из целых чисел. Значения n и m, а также значения элементов массива C вводятся пользователем с клавиатуры. Элементы в столбцах массива C не должны повторяться.
Вариант №13
Используя метод выбора, упорядочить по убыванию значения, содержащиеся в строках двумерного массива C с рабочим размером n х n. Вывести массив C на экран.
48
Массив C должен состоять из целых чисел. Значение n вводится пользователем с клавиатуры. Значения элементов массива С генерируются при помощи датчика случайных чисел. Элементы в строках массива C не должны повторяться.
Вариант №14
На основе исходного двумерного массива C с рабочим размером n x n, сформировать одномерный массив A. Массив A должен содержать только те числа, которые встречаются в массиве C только один раз. Упорядочить массив A по убыванию, используя метод выбора. Вывести массив A на экран.
Массивы A и C должны состоять из целых чисел. Значение n, а также значения элементов массива C вводятся пользователем с клавиатуры.
Вариант №15
На основе исходного двумерного массива C с рабочим размером n x n, сформировать одномерный массив A. Массив A должен содержать только те числа, которые встречаются в массиве C более одного раза. Упорядочить массив A по убыванию, используя метод «пузырька». Вывести массивы C и A на экран.
Массивы A и C должны состоять из целых чисел. Значение n вводится пользователем с клавиатуры. Значения элементов массива С генерируются при помощи датчика случайных чисел.
6.3. Требования к оформлению отчета
По данной лабораторной работе требуется подготовить отчет. Отчет должен включать в себя:
титульный лист;
постановку задачи;
блок-схему программы (1);
49