Сравнение строк

Для сравнения двух объектов класса basic_string или объекта класса basic_string и C-строки предназначены операторы == (равно), != (не равно), < (меньше), > (больше), <= (меньше или равно) и >= (больше или равно). Пример сравнения строк:

std::string str1("abc"), str2("abcd");
if (str1 == str2) {
   std::cout << "str1 == str2" << std::endl;
}
else if (str1 < str2) {
   std::cout << "str1 < str2" << std::endl;
}
else if (str1 > str2) {
   std::cout << "str1 > str2" << std::endl;
} // Результат: str1 < str2

Обратите внимание на то, что сравнивать с помощью этих операторов C-строки нельзя, так как будут сравниваться адреса, а не символы в строках. Для сравнения C-строк необходимо использовать специальные функции, например, strcmp() (см. разд. 7.11). Чтобы операторы работали корректно, необходимо, чтобы справа или слева от оператора находился объект класса basic_string. Пример:

char a[] = "abc", b[] = "abc";
std::string c("abc");
std::cout << (a == b) << std::endl; // Сравниваются адреса!!!
std::cout << std::strcmp(a, b) << std::endl; // OK (равны)
std::cout << (a == c) << std::endl;          // OK (равны)
std::cout << (c == b) << std::endl;          // OK (равны)

Для сравнения объекта класса basic_string с другим объектом класса basic_string или C-строкой можно использовать метод compare(). В качестве значения метод возвращает:

  • отрицательное число — если объект класса basic_string меньше строки, переданной в качестве параметра;
  • 0 — если строки равны;
  • положительное число — если объект класса basic_string больше строки, переданной в качестве параметра.

Прототипы метода:

int compare(const _CharT *str) const noexcept;
int compare(size_type pos, size_type len, const _CharT *str) const;
int compare(size_type pos, size_type len, const _CharT *str,
            size_type count) const;
int compare(const basic_string &str) const;
int compare(size_type pos, size_type len,
            const basic_string &str) const;
int compare(size_type pos, size_type len, const basic_string &str,
            size_type pos2, size_type count=npos) const;

Первый прототип сравнивает объект класса basic_string с C-строкой. Второй прототип сравнивает фрагмент объекта класса basic_string длиной len начиная с индекса pos с C-строкой, а третий прототип позволяет дополнительно указать длину фрагмента в C-строке с начала строки. Четвертый прототип сравнивает два объекта класса basic_string. Пятый прототип сравнивает фрагмент объекта класса basic_string длиной len начиная с индекса pos с другим объектом класса basic_string, а шестой прототип позволяет дополнительно указать количество символов count и начальный индекс pos2 в строке str. Сравнение производится с учетом регистра символов. Пример сравнения строк:

std::string str1("abc"), str2("abd");
std::cout << str1.compare("abd") << std::endl;      // -1
std::cout << str2.compare("abd") << std::endl;      // 0
std::cout << str1.compare("abb") << std::endl;      // 1
std::cout << str1.compare(0, 2, "ab") << std::endl; // 0
std::cout << str1.compare(0, 2, "abc", 2)
          << std::endl;                             // 0
std::cout << str1.compare(str2) << std::endl;       // -1
std::cout << str1.compare(0, 2, str2) << std::endl; // -1
std::cout << str1.compare(0, 2, str2, 0, 2)
          << std::endl;                             // 0

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

Помощь сайту

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

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