Сравнение массивов

Для сравнения массивов предназначена функция memcmp(). Функция memcmp() сравнивает первые size байтов массивов buf1 и buf2. В качестве значения функция возвращает:

  • отрицательное число — если buf1 меньше buf2;
  • 0 — если массивы равны;
  • положительное число — если buf1 больше buf2.

Прототип функции:

#include <cstring> /* или #include <string.h>
                      или #include <memory.h> */
int memcmp(const void *buf1, const void *buf2, size_t size);

Пример:

int arr1[3] = {1, 2, 3}, arr2[3] = {1, 2, 3}, x = 0;
x = std::memcmp(arr1, arr2, sizeof arr2);
std::cout << x << std::endl;                // 0
arr1[2] = 2; // arr1[] = {1, 2, 2}, arr2[] = {1, 2, 3}
x = std::memcmp(arr1, arr2, sizeof arr2);
std::cout << x << std::endl;                // -1
arr1[2] = 4; // arr1[] = {1, 2, 4}, arr2[] = {1, 2, 3}
x = std::memcmp(arr1, arr2, sizeof arr2);
std::cout << x << std::endl;                // 1

Функция memcmp() производит сравнение с учетом регистра символов. Если необходимо произвести сравнение без учета символов, то можно воспользоваться функциями _memicmp() и _memicmp_l(). Для сравнения русских букв следует настроить локаль. Прототипы функций:

#include <cstring> /* или #include <string.h>
                      или #include <memory.h> */
#include <clocale> /* или #include <locale.h> */
int _memicmp(const void *buf1, const void *buf2, size_t size);
int _memicmp_l(const void *buf1, const void *buf2, size_t size,
               _locale_t locale);

Предназначение параметров и возвращаемое значение такое же, как у функции memcmp(). Функция _memicmp_l() позволяет дополнительно задать локаль. Пример использования функций:

std::setlocale(LC_ALL, "Russian_Russia.1251");  // Настройка локали
char str1[] = "абв", str2[] = "АБВ";
int x = 0;
x = _memicmp(str1, str2, sizeof str2);
std::cout << x << std::endl;                    // 0
x = std::memcmp(str1, str2, sizeof str2);
std::cout << x << std::endl;                    // 1
_locale_t locale = _create_locale(LC_ALL, "Russian_Russia.1251");
x = _memicmp_l(str1, str2, sizeof str2, locale);
std::cout << x << std::endl;                    // 0
_free_locale(locale);
На заметку

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов