Група D
 Теми
 Задачи
 Решения


"Ръководство за начална подготовка в извънкласните форми на програмиране"

5.1 Лексикографска наредба

При сравняване за неравенство между два низа st1 и st2 се прилага лексикографска наредба. Тази наредба се основава на сравняването на знаци. Наредбата между знаците се определя чрез таблицата ASCII (Американски стандарт за обмен на информация) – един знак се счита за по-малък от друг, ако има по-малък номер в тази таблица. Например шпацията има номер 32 и следователно е по-малка от всеки друг видим знам. Наредбата на знаците обобщава обичайната наредба на буквите в латинската или българската азбука, за която знаем какво означава една буква да предхожда друга – например ‘а’ е преди ‘б’, а ‘ь’ е след ‘ъ’. Всяка главна буква от латинската или от българската азбука е преди коя да е малка буква от същата азбука.

Съгласно общоприетото понятие за лексикографска наредба, за да се определи дали един низ е по-малък от друг низ, се прилага следното правило:

Започваме едновременно поелементно преглеждане на двата низа в посока от ляво на дясно. В момента, когато в низовете срещнем два съответни знака, които не са равни, тогава за по-малък низ се обявява този, при който съответният знак е по-малък. Ако това не се случи до края на поне един от низовете, за по-малък се обявява този низ, който е по-къс. Ако обаче в този момент двата низа са с равни дължини, това означава, че низовете са еднакви, следователно равни при лексикографската наредба.

Пример: Нека

char s1[]=”Това е първи низ”;
char s2[]=”Това е втори низ”;

От двата низа s1 и s2 вторият е по-малък от първия, защото, когато започнем да сравняваме поелементно знаците им отляво-надясно, първият път, когато попадаме на неравни знаци, имаме буквата “п” в низа s1 и буквата “в” в низа s2. Понеже азбучният ред на “в” е преди “п”, следва че целият низ s2 е преди s1, т.е. s2 е по-малък от s1.


Съгласно правилото на лексикографската наредба, ако първият знак на низа st1 е по-малък от първия знак на низа st2, тогава и целият низ st1 е по-малък от st2.

За наредбата при низове използваме обичайното означение за неравенство: st1 < st2, чъпреки че то не е стандартно за езика С++. Да отбележим, че не винаги, когато един низ е по-малък от друг, той трябва да е по-къс от него. Например низът “ааа” е по-малък от “xx”. Когато един низ е по-малък от друг, казваме, че той е по-напред в лексикографската наредба или, че първият низ предшества втория.

Примери за лексикографска наредба: Следните условия са верни

“а” < “b”, “aa” < “ab”, “aaa” < “aab”, “a” < “aa”, “A” < “a”,

а следните не са верни:

“a” < “a”, “ab” < “aa”, “aab” < “aaa”, “ba” < “aa”, “aa” < “a”.

По аналогичен начин на означението “по-малко” (<) се употребява и означението “по-голямо” (>) между низове. При работа с низове се използват още и знаците “<=”, “>=” и “=”, чийто смисъл е достатъчно очевиден. В езика С++ е възможно да се програмира употребата на тези знаци, така че тя да се разшири и за отношения между низове, но тук няма да разглеждаме тази възможност.

В езика С++ за определяне на отношението между низовете s1 и s2 се използва функцията strcmp(s1, s2). Вече споменахме, че ако strcmp(s1, s2)= =0, низове са равни. За другите стойности на тази функция е в сили:

ако strcmp(s1, s2) < 0, тогава s1 е по-малък от s2;
ако strcmp(s1, s2) > 0, тогава s1 е по-голям от s2;

Основен пример за практическо прилагане на лексикографската наредба е подреждането на думите в речниците. Лексикографската наредба често се среща и под наименованието азбучна наредба.

Назад | Горе | Напред