Kollationsfunktionen in c

Kollationsfunktionen in c
Die Kollektion ist ein sehr wichtiger Prozess der Charakteranordnung und ermöglicht es sowohl das System als auch den Benutzer, die Texte, Webseiten und Programme korrekt zu verstehen oder anzuzeigen.

Die Algorithmen für die Charaktersortierung sind ziemlich langwierig und umständlich zu erklären. Daher in diesem Linux -Hinweis Artikel, wir geben einen kurzen Überblick über die Charaktercodierung und Sortierung des Mittelwerts auf der Grundlage verschiedener lokaler Daten. Wir werden dann erklären, wie die beiden grundlegenden Funktionen verwendet werden, die C bereitstellt, um die Zeichenketten basierend auf der Sprache und Kollektion der verschiedenen lokalen Daten zu verarbeiten, die beim Computer verwendet werden.

Es ist sehr wichtig zu klären, dass Unicode-Codierung eine Multi-Byte-Codierung ist, sodass ein Charakter mehrere „Zeichen“ besetzen kann. In diesem Artikel werden wir jedoch die beiden grundlegenden Funktionen sehen, um die Zeichen mit Kollation in den Daten vom Typ „char“ zu verarbeiten,. Der „WCHAR.H ”Header definiert die Multibyte -Zeichen und bietet ähnliche Funktionen für den Umgang der Zeichen mit großer Größe.

Zeichenkodierung

Charaktercodierung ist die Zuordnung eines repräsentativen binären numerischen Wertes zu jedem alphabetischen Charakter, Symbol, Spezialcharakter oder Kontrollcharakter

Der ASCII -Code ist eine der einfachsten und am weitesten verbreiteten „I“ C -Sprache. Es ist die Codierung, die wir normalerweise für Zeichen des Typs „Char“ verwenden, den wir in Saiten einfügen. Diese Codierung verwendet ein einzelnes Byte pro Zeichen, 7 Bit, um jedes Zeichen der meisten westlichen Alphabete sowie deren Kontrolle und Sonderzeichen darzustellen. Das verbleibende Bit wird für die Paritätsprüfung während der Fehlererkennung verwendet. In der erweiterten Version werden alle 8 Bit verwendet, um die zusätzlichen Zeichen darzustellen.

Während ASCII die Anforderungen der meisten westlateinischen Alphabete erfüllte, tat dies nicht für Ostalphabete. Die Unicode -Codierung enthält alle Zeichen der Alphabete aller westlichen und östlichen Sprachen. Aus diesem Grund ist es derzeit dank seiner Portabilität bei der Textcodierung, seiner Flexibilität und der Kompatibilität mit dem ASCII -Code einer der am häufigsten verwendeten.

Dieses umfangreiche Satz codierter Zeichen ist in Gruppen unterteilt, von denen jede eine spezifische lexikografische Ordnung hat, um das Alphabet für jede Sprache oder Region zu bilden.

Kollation von Charakteren

Die Portabilität und der Informationsaustausch bedeutet häufig, dass wir die in einer anderen Region geschriebenen Zeichen und Dateien verarbeiten müssen. Die lexikografische Reihenfolge der Zeichen, die im Alphabet verwendet wird, die sie erstellt haben.

Ein Beispiel hierfür ist der Unterschied zwischen dem lateinischen Alphabet, das 26 Buchstaben hat, und dem spanischen Alphabet mit 27 Buchstaben. Im lateinischen Alphabet ist der Buchstaben, der dem „N“ folgt, das „O“,. Aber im spanischen Alphabet folgt es "ñ". Als nächstes sehen wir eine Tabelle mit diesen Buchstaben und ihrer Dezimalzahl der Darstellung in ASCII:

Englisch Spanisch
N 110 N 110
Ö 111 N 165

Diese Unterschiede machen es notwendig, die Zeichen gemäß dem Alphabet und der Zone, in der der Text zu interpretieren ist.

Lokale Daten des Betriebssystems

Jedes Mal, wenn wir unseren Computer einschalten, lädt Linux einen Satz vordefinierter Parameter während der Installation oder später vom Benutzer, der die Sprache, die Codierung, die Art der verwendeten Zeichen und die Sortierung von Regeln für die Region festgelegt hat. Dies bestimmt, wie der Text vom System gerendert und angezeigt wird

Diese Parameter werden als lokale Daten bezeichnet. Wir können sie in der Linux -Konsole mit dem folgenden Befehl anzeigen:

~ $ Gebietsschema

Dieser Befehl zeigt in der Konsole an. Unter anderem die Parameter für die lokalen Daten, die Sprache, die Charaktercodierung und die Sortierung des Systems für diese Region des Systems.

Wie wir in der Abbildung sehen können, ist die Codierung für die regionale englische Sprache der Vereinigten Staaten en_us.UTF-8. Um die Liste der in unserem Betriebssystem installierten lokalen Daten und Engpässe anzuzeigen, müssen wir den folgenden Befehl ausführen:

~ $ Locale -a

Die folgende Abbildung zeigt die Liste der Gebietsschemasdaten, die im Betriebssystem installiert ist.

Beachten Sie, dass die Sprache zwar für alle Optionen gleich ist, in diesem Fall das Englisch (EN) ist, aber die Codierungs- und Sortiereinstellungen sind nicht. Der für die Vereinigten Staaten ist "en_us", während der für Kanada "in_ ca" ist.

So wählen Sie die lokalen Daten eines Programms mit der Funktion SetLocale () in der C -Sprache aus

Die gleichen Parameter, die durch den Befehl „~ $ locale“ in der Linux -Konsole zurückgegeben werden, sind im „Gebietsschema“ definiert.H ”Header in C mit identischer Syntax und Darstellung und kann in der lokalen Instanz mit der SetLocale -Funktion geändert werden.

Syntax der SetLocale () -Funktion in der C -Sprache

char* setlocale (int kategorie, char* local)

Beschreibung der SetLocale () -Funktion in der C -Sprache

Die SetLocale () -Funktion wählt die lokalen Daten aus, die das von uns zusammengestellte Programm verwendet. Wir können auch die aktuelle Konfiguration überprüfen. Wenn diese Parameter nicht von dieser Funktion im Code festgelegt werden, stand die Verwendung der lokalen Daten des Systems, auf dem es ausgeführt wird.

Lassen Sie uns als nächstes die Liste der wichtigsten Parameter betrachten, die der SetLocale () ändert oder Abfragen, die den Sprach- und Sortierprozess beeinflussen:

SPRACHE= Modifiziert oder konsultiert die Landessprache.

Lc_ctype= Gibt die Art der Zeichen für das Gebietsschema an oder fragte oder fragt sie ab.

Lc_numeric= Gibt die Art der numerischen Zeichen an oder fragte oder fragt sie ab.

Lc_time= Gibt den Kalender- und Zeitdaten für die lokale Einstellung an oder fragte sie ab.

Lc_collate/.

Lc_all= Gibt den gesamten lokalen Datensatz an oder fragte oder fragt sie ab.

Die Funktion strxfrm () ist in der String definiert.H ”Kopfball. Um es zu verwenden, müssen wir es wie folgt in unseren Code aufnehmen:

#enthalten

Sofragen Sie die aktuelle Gebietskonfiguration des Systems mit der Funktion SetLocale () in C ab

Die SetLocale -Funktion bietet die Möglichkeit, die Gebietsschemasdaten im Allgemeinen oder jeder seiner Parameter einzeln zu ändern. Es bietet auch die Möglichkeit, die verwendete Konfiguration abzufragen.

Dazu müssen wir die Funktion setLocale () aufrufen und den Parameter übergeben, den wir als erstes Eingabeargument und als leere Zeichenfolge als zweites Argument abfragen möchten.

Die Funktion setLocale () gibt den Zeiger auf eine Zeichenfolge zurück, die den Namen der aktuellen Gebietsschemasdaten enthält. Im Folgenden ist der Code, der die aktuelle Konfiguration abfragt und in der Befehlskonsole angezeigt wird:

#enthalten
#enthalten
#enthalten
void main ()
char* c_ptr;
c_ptr = setLocale (lc_all, "");
printf ("\ n \ ncurrent lokaler Dateneinstellung ist: %s \ n \ n", c_ptr);

Wie im folgenden Bild zu sehen ist, gibt SetLocale eine Zeichenfolge mit dem aktuellen Gebietsschema zurück:

So wählen Sie die aktuelle lokale und kollationsbekannte Konfiguration mit der Funktion setLocale () in c aus

Die Funktion setLocale () kann verwendet werden, um die lokalen Daten im Allgemeinen mit „LC _all“ oder über die einzelnen Parameter auszuwählen oder zu ändern, um die Kollation von Zeichen basierend auf dem von uns ausgewählten Bereich durchzuführen.

Dazu müssen wir die Funktion setLocale () aufrufen und den Parameter übergeben, den wir als erstes Argument und eine Zeichenfolge mit der lokalen Konfiguration ändern möchten, die wir als zweites Argument auswählen möchten.

Hier ist der Code, um die Codale der UTF-8 Codierten Kanada auszuwählen:

#enthalten
#enthalten
#enthalten
void main ()
setLocale (lc_all, "en_ca.UTF-8 ");

Wie wir bisher gesehen haben, ist die Sortierung vollständig an das ausgewählte Gebietsschema gebunden. Lassen Sie uns als nächstes die beiden Funktionen ansehen, die die C -Sprache bietet, um die Zeichenfolgen basierend auf unserer ausgewählten lokalen Konfiguration zu verarbeiten: Strxfrm () und Strcoll ().

Strxfrm () Funktion in der C -Sprache

Syntax:

int strxfrm (char* s1, char* s2, int n)

Beschreibung der Funktion strxfrm () in der C -Sprache

Die Funktion strxfrm () kopiert die Zeichenfolge „S2“ mit „n“ Zeichen und speichert sie, um sie in der Kollation des Gebietsschemas, das mit Setlocale () ausgewählt wird, in „S1“ umzuwandeln (). Wenn die Gebietsschemaseinstellung zuvor nicht mit SetLocale () ausgewählt ist, basiert die Kollation auf der aktuellen Systemeinstellung.

Die Funktion von Strxfrm () gibt eine Ganzzahl mit der Anzahl der Zeichen zurück, die die neue Zeichenfolge dauert, da die Anzahl der Zeichen in der Kollation möglicherweise mehr oder weniger als die des ursprünglichen Zeichens betragen kann.

Die Funktion strxfrm () funktioniert ähnlich wie die Funktion von Strcpy (), mit der Ausnahme, dass wir angeben können, welche Zonenkonfigurationsregeln, die die neue Zeichenfolge zurückgeben soll. Dies fügt der Verwendung dieser Funktion Flexibilität hinzu, da wir SetLocale () und strxfrm () verwenden können.

Die Funktion strxfrm () ist in der String definiert.H ”Kopfball. Um es zu verwenden, müssen wir es wie folgt in unseren Code aufnehmen:

#enthalten

So konvertieren Sie eine Zeichenfolge mit einem Gebietsschema und einer bestimmten Sortierreihenfolge mit der Funktion strxfrm () in c

In diesem Beispiel erstellen wir die Zeichenfolge „Str_2“ mit lokalen Daten aus den USA und konvertieren sie in die Zeichenfolge „Str_1“ mit lokalen Daten, die für Spanien konfiguriert sind.

Dazu verwenden wir die SetLocale (), um die Sortierreihenfolge für das Gebietsschema von Spanien LC _collate = "Es_ Es" festzulegen. Wir konvertieren "str_2" in die Zeichenfolge "str_1" mit strxfrm (). In der folgenden Abbildung finden Sie den Code für diesen Zweck:

#enthalten
#enthalten
#enthalten
void main ()
char str_1 [100];
char str_2 [100];
int cn;
cn = strcpy (str_2, "Linux tipp");
setLocale (lc_all, "sp_sp");
cn = strxfrm (str_1, str_s, cn);

Strcoll () Funktion in der C -Sprache

Syntax:

int strcoll (char* s1, char* s2)

Beschreibung der Funktion von Strcoll () in der C -Sprache

Die Funktion strcoll () vergleicht die "S2" mit "S1" -Anzeichenfolge basierend auf der Kollektion des mit SetLocale ausgewählten Gebietsschemas () (). Wenn die Gebietsschemaseinstellung zuvor nicht mit SetLocale () ausgewählt ist, basiert die Kollation auf der aktuellen Systemeinstellung.

Die Funktion von Strcoll () gibt eine Ganzzahl gleich 0 zurück, wenn die Zeichenfolgen gleich sind. Das Ergebnis ist größer als 0, wenn S2 größer als S1 ist. Das Ergebnis ist weniger als 0, wenn es kleiner als S1 ist.

Diese Funktion funktioniert ähnlich wie bei Strcmp () mit dem Unterschied, mit dem wir angeben können, mit welchen Zonenkonfigurationsregeln die Zeichenfolgen verglichen werden sollten.

Die Funktion strcoll () ist in der String definiert.H ”Kopfball. Um es zu verwenden, müssen wir es wie folgt in unseren Code aufnehmen:

#enthalten

Vergleichen Sie zwei Zeichenfolgen mit der spezifischen Sortierkonfiguration mit der Funktion strcoll () in c

In diesem Beispiel vergleichen wir die Zeichenfolge „Str_2“ mit „str_1“ -Sziel mit einer bestimmten Sortierkonfiguration. In diesem Fall ist Spanisch aus Argentinien, nämlich "Es_ ar".

Zu diesem Zweck erstellen wir zwei Zeichenfolgen, die denselben Text enthalten, außer dass „Str_2“ einen Akzent auf den fünften Buchstaben hat. Der Akzent ist ein Symbol über einen Buchstaben auf Spanisch, daher ist der Glyphe für diesen Charakter anders. Dann setzen wir das Gebietsschema für Argentinien und vergleichen die Saiten mit der Funktion von Strcoll (). Wir speichern das Ergebnis in der Ganzzahl „CN“ und geben es mit printf () an die Befehlskonsole aus.

Das Folgende ist der Code für diesen Vergleich:

#enthalten
#enthalten
#enthalten
void main ()
char str_1 [100] = "Hallo Welt";
char str_2 [100] = "Hellor World";
int cn;
setLocale (lc_all, "es_ar");
cn = strcoll (str_1, str_2);
printf ("%i", cn);

Abschluss

In diesem Linux -Hinweis -Artikel haben wir kurz erklärt, was die Charaktercodierung in der Informatik bedeutet, damit Sie eine klarere Vorstellung davon haben, was die Charaktercodierung von den lokalen Konfigurationen von Computersystemen bedeutet. Dann haben wir Ihnen gezeigt, wie Sie die beiden grundlegenden Merkmale verwenden, die die C -Sprache bietet, um die Zeichenkennzeichen zu bewältigen. Wir hoffen, dass dieser Artikel für Sie nützlich ist. Weitere Artikel über die C -Sprach- und Linux -Spitzen finden Sie in der Suchmaschine der Website.