Функция strcoll () в C ++ сравнивает две строки с нулевым завершением. Сравнение основано на текущей локали, определенной категорией LC_COLLATE.
strcmp () достаточно для большинства сравнений строк, но при работе с символами Юникода иногда есть определенные нюансы, которые делают некорректное побайтовое сравнение строк.
Например, если вы сравниваете две строки на испанском языке, они могут содержать символы с ударением, такие как á, é, í, ó, ú, ü, ñ, ¿, ¡и т. Д.
По умолчанию такие символы с ударением идут после всего алфавита a, b, c… z. Такое сравнение было бы ошибочным, потому что разные акценты a должны стоять перед b.
strcoll () использует текущий языковой стандарт для выполнения сравнения, дающего в таких случаях более точный результат.
Это определено в заголовочном файле.
strcoll () прототип
int strcoll (const char * lhs, const char * rhs);
Функция strcoll () принимает два аргумента: lhs и rhs. Он сравнивает содержимое lhs и rhs на основе текущей локали категории LC_COLLATE.
Параметры strcoll ()
- lhs и rhs: указатель на строки с завершающим нулем для сравнения.
strcoll () Возвращаемое значение
Функция strcoll () возвращает:
- положительное значение, если первый различающийся символ в левой части больше, чем соответствующий знак в правой части.
- отрицательное значение, если первый отличающийся символ в левой части меньше соответствующего символа в правой части.
- 0, если левая и правая равны.
Пример: как работает функция strcoll ()?
#include #include using namespace std; int main() ( char lhs() = "Armstrong"; char rhs() = "Army"; int result; result = strcoll(lhs,rhs); cout < 0) cout << rhs << " precedes " << lhs << endl; else if (result < 0) cout << lhs << " precedes " << rhs << endl; else cout << lhs << " and " << rhs << " are same" << endl; return 0; )
Когда вы запустите программу, вывод будет:
В текущем регионе Армстронг предшествует армии