Funkcje łączenia w C

Funkcje łączenia w C
Zbieranie jest bardzo ważnym procesem układu znaków i umożliwia zarówno systemowi, jak i użytkownikowi poprawne zrozumienie lub wyświetlanie tekstów, stron internetowych i programów niezależnie od użytego alfabetu lub regionu, w którym zostały napisane, oraz ich różnice alfabetyczne.

Algorytmy sortowania znaków są dość długie i kłopotliwe do wyjaśnienia. Dlatego w tym Wskazówka Linux Artykuł, podamy krótki przegląd kodowania i sortowania postaci na podstawie różnych danych lokalnych. Następnie wyjaśnimy, jak korzystać z dwóch podstawowych funkcji, które C zapewnia Coraz obsługiwane w zakresie znaków postaci w oparciu o język i zestawienie różnych danych lokalnych używanych w obliczeniach.

Bardzo ważne jest wyjaśnienie, że kodowanie Unicode to kodowanie wielu bytów, więc jedna postać może zajmować wiele „znaków”. Chociaż w tym artykule zobaczymy dwie podstawowe funkcje do obsługi znaków z zestawieniem w danych typu „char”. „Wchar.H ”nagłówek definiuje znaki multibyte i zapewnia podobne funkcje do obsługi znaków o dużym rozmiarze.

Kodowanie znaków

Kodowanie znaków jest przypisaniem reprezentatywnej wartości binarnej liczbowej do każdego znaku alfabetycznego, symbolu, charakteru specjalnego lub charakteru kontrolnego

Kod ASCII jest jednym z najprostszych i najczęściej używanych języków „I”. Jest to kodowanie, którego zwykle używamy do znaków typu „char”, które wkładamy w struny. To kodowanie wykorzystuje pojedynczy bajt na znak, 7 bitów do reprezentowania każdej postaci większości zachodnich alfabetów, a także ich kontroli i znaków specjalnych. Pozostały bit służy do sprawdzania parzystości podczas wykrywania błędów. W wersji rozszerzonej wszystkie 8 bitów służy do reprezentowania dodatkowych znaków.

Podczas gdy ASCII spełniało wymagania większości zachodnich alfabetów łacińskich, nie było to dla alfabetów wschodnich. Kodowanie Unicode obejmuje wszystkie znaki alfabetów wszystkich języków zachodnich i wschodnich. Właśnie dlatego jest to jeden z najczęściej używanych, dzięki swojej przenośności w kodowaniu tekstu, elastyczności i kompatybilności z kodem ASCII.

Ten obszerny zestaw zakodowanych znaków jest podzielony na grupy, z których każda ma określony porządek leksykograficzny, aby utworzyć alfabet dla każdego języka lub regionu.

Zestawienie postaci

Przenośność i wymiana informacji często oznacza, że ​​musimy przetwarzać znaki i pliki zapisane w innym regionie. Kolejność leksykograficzna znaków używanych w alfabecie, który je utworzył.

Przykładem tego jest różnica między alfabetem łacińskim, który ma 26 liter a hiszpańskim alfabetem, który ma 27 liter. W alfabecie łacińskim literą podążającą za „n” to „O”. Ale w hiszpańskim alfabecie następuje „ñ”. Następnie widzimy tabelę z tymi literami i ich dziesiętną liczbę reprezentacji w ASCII:

język angielski hiszpański
N 110 N 110
O 111 N 165

Różnice te sprawiają, że konieczne jest zmianę postaci zgodnie z alfabetem i strefą, w której tekst ma być interpretowany.

Lokalne dane systemu operacyjnego

Za każdym razem, gdy włączamy nasz komputer, Linux ładuje zestaw predefiniowanych parametrów ustawionych podczas instalacji lub później zmodyfikowanych przez użytkownika, który określa język, kodowanie, rodzaj używanych znaków i sortowanie reguł dla regionu. To określa, w jaki sposób tekst jest renderowany i wyświetlany przez system

Te parametry nazywane są danymi lokalnymi. Możemy je wyświetlić w konsoli Linux za pomocą następującego polecenia:

~ $ LOCALE

To polecenie wyświetla się w konsoli. Między innymi parametry danych lokalnych systemu, języka, kodowania znaków i sortowania dla tego regionu.

Jak widzimy na rysunku, kodowanie regionalnego języka angielskiego w Stanach Zjednoczonych jest en_us.UTF-8. Aby zobaczyć listę różnych lokalnych danych i kodowania zainstalowanych w naszym systemie operacyjnym, musimy uruchomić następujące polecenie:

~ $ locale -a

Poniższy rysunek pokazuje listę danych lokalizacji zainstalowanych w systemie operacyjnym.

Zauważ, że chociaż język jest taki sam dla wszystkich opcji, w tym przypadku jest angielski (EN), ustawienia kodowania i sortowania nie są. Tym dla Stanów Zjednoczonych jest „en_us”, a ten dla Kanady jest „in_ ca”.

Jak wybrać lokalne dane programu z funkcją setLocale () w języku c

Te same parametry, które są zwracane przez polecenie „~ $ locale” w konsoli Linux, są zdefiniowane w „regionie regionalnym.H ”nagłówek w C z identyczną składnią i reprezentacją i można go zmienić w lokalnej instancji z funkcją SetLocale.

Składnia funkcji setLocale () w języku c

char* setlocale (kategoria int, char* lokalna)

Opis funkcji setLocale () w języku c

Funkcja setLocale () wybiera dane lokalne, których używa program, którego kompilujemy. Możemy również sprawdzić bieżącą konfigurację. Jeśli te parametry nie są ustawione przez tę funkcję w kodzie, program domyślnie używa lokalnych danych systemu, w którym uruchomi się.

Następnie spójrzmy na listę najważniejszych parametrów, które zmienia się lub zapytania setLocale (), które wpływają na język i proces sortowania:

JĘZYK= Modyfikuje lub konsultuje się z językiem lokalnym.

LC_CTYPE= Określa lub pyta o rodzaj znaków dla regionu.

LC_Numeric= Określa lub zapytanie o rodzaj znaków numerycznych.

Lc_time= Określa lub pyta dane kalendarza i czasu dla ustawienia lokalnego.

Lc_collate= Określ lub zapytaj o reguły zestawienia znaków.

LC_ALL= Określa lub pyta cały lokalny zestaw danych.

Funkcja strxfrm () jest zdefiniowana w „ciągu.H ”nagłówek. Aby go użyć, musimy uwzględnić go w naszym kodzie w następujący sposób:

#włączać

Jak zapytać o bieżącą konfigurację lokalizacji systemu za pomocą funkcji setLocale () w c

Funkcja SetLocale zapewnia możliwość zmiany danych lokalizacji w ogóle lub każdego z jej parametrów indywidualnie. Zapewnia również możliwość zapytania o używaną konfigurację.

Aby to zrobić, musimy wywołać funkcję setLocale () i przekazać parametr, który chcemy zapytać jako pierwszy argument wejściowy i pusty ciąg jako drugi argument.

Funkcja setLocale () zwraca wskaźnik do ciągu, który zawiera nazwę bieżących danych lokalizacji. Poniżej znajduje się kod, który pyta bieżącą konfigurację i wyświetla ją w konsoli poleceń:

#włączać
#włączać
#włączać
void main ()
char* c_ptr;
c_ptr = setLocale (lc_all, „”);
printf ("\ n \ ncurrent Lokalne ustawienie danych to: %s \ n \ n", c_ptr);

Jak widać na poniższym obrazie, SetLocale zwraca ciąg z bieżącą regioną:

Jak wybrać bieżącą konfigurację lokalną i kolacyjną z funkcją setLocale () w c

Funkcję setLocale () może być używana do wyboru lub zmiany danych lokalnych w ogóle za pomocą „LC _ALL” lub za pomocą poszczególnych parametrów, aby wykonać zestawienie znaków na podstawie wybranego zakresu.

Aby to zrobić, musimy wywołać funkcję setLocale () i przekazać parametr, który chcemy zmienić jako pierwszy argument i ciąg z lokalną konfiguracją, którą chcemy wybrać jako drugi argument.

Oto kod, który wybiera koodcję UTF-8 Kodowaną Kanadę:

#włączać
#włączać
#włączać
void main ()
setLocale (LC_ALL, „en_ca.UTF-8 ");

Jak widzieliśmy do tej pory, sortowanie jest całkowicie powiązane z wybraną lokalizacją. Następnie spójrzmy na dwie funkcje, które Język C zapewnia, aby obsłużyć struny na podstawie naszej wybranej konfiguracji lokalnej: strxfrm () i Strcoll ().

Funkcja strxfrm () w języku c

Składnia:

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

Opis funkcji strxfrm () w języku C

Funkcja strxfrm () kopiuje ciąg „S2” z znakami „N” i przechowuje go, aby przekonwertować go na „S1” w zestawieniu regionalnej wybranej z setLocale (). Jeśli ustawienie lokalizacji nie jest wcześniej wybrane z setLocale (), zestawienie jest oparte na bieżącym ustawieniu systemowym.

Funkcja strxfrm () zwraca liczbę całkowitą z liczbą znaków, które przyjmuje nowy ciąg, ponieważ liczba znaków w zestawieniu może być mniej lub mniejsza niż w oryginalnym ciągu.

Funkcja strxfrm () działa podobnie do funkcji strcpy (), z tym wyjątkiem, że pozwala nam określić, które reguły konfiguracji strefy powinny zwrócić nowy ciąg. To zwiększa elastyczność do użycia tej funkcji, ponieważ możemy użyć setLocale () i strxfrm () do konwersji sznurków w wybranym miejscu, a także ich tworzenia.

Funkcja strxfrm () jest zdefiniowana w „ciągu.H ”nagłówek. Aby go użyć, musimy uwzględnić go w naszym kodzie w następujący sposób:

#włączać

Jak przekonwertować łańcuch za pomocą lokalizacji i określonej kolejności sortowania za pomocą funkcji strxfrm () w c

W tym przykładzie tworzymy ciąg „str_2” z danymi lokalnymi ze Stanów Zjednoczonych i konwertujemy go do ciągu „str_1” z danymi lokalnymi skonfigurowanymi dla Hiszpanii.

Aby to zrobić, używamy setLocale (), aby ustawić kolejność sortowania dla lokalizacji Hiszpanii LC _Collate = ”ES_ ES”. Konwertujemy „str_2” na ciąg „str_1” ze strxfrm (). Kod można znaleźć do tego celu na następującej ilustracji:

#włączać
#włączać
#włączać
void main ()
char str_1 [100];
char str_2 [100];
int cn;
cn = strcpy (str_2, „Linux wskazówka”);
setLocale (lc_all, „sp_sp”);
cn = strxfrm (str_1, str_s, cn);

Funkcja strcoll () w języku c

Składnia:

int strcoll (char* s1, char* s2)

Opis funkcji Strcoll () w języku C

Funkcja Strcoll () porównuje „S2” z ciągiem „S1” na podstawie połączenia regionalnej wybranej z setLocale (). Jeśli ustawienie lokalizacji nie jest wcześniej wybrane z setLocale (), zestawienie jest oparte na bieżącym ustawieniu systemowym.

Funkcja strcoll () zwraca liczbę całkowitą równą 0, jeśli ciągi są równe. Wynik jest większy niż 0, jeśli S2 jest większy niż S1. Wynik jest mniejszy niż 0, jeśli jest mniejszy niż S1.

Ta funkcja działa podobnie do strcmp () z różnicą, której możemy użyć do określenia, które reguły konfiguracji strefy należy porównać.

Funkcja strcoll () jest zdefiniowana w „ciągu.H ”nagłówek. Aby go użyć, musimy uwzględnić go w naszym kodzie w następujący sposób:

#włączać

Porównaj dwa ciągi za pomocą konkretnej konfiguracji sortowania z funkcją Strcoll () w C

W tym przykładzie porównujemy ciąg „str_2” z ciągiem „str_1” za pomocą określonej konfiguracji sortowania. W tym przypadku jest hiszpański z Argentyny, a mianowicie „es_ ar”.

W tym celu tworzymy dwa ciągi, które zawierają ten sam tekst, z wyjątkiem tego, że „str_2” ma akcent na piątej liście. Akcent jest symbolem nad literą używaną w języku hiszpańskim, więc glif dla tej postaci jest inny. Następnie ustawiamy regionę dla Argentyny i porównujemy funkcję Strcoll (). Przechowujemy wynik liczby całkowitej „cn” i wyprowadzamy ją do konsoli poleceń z printf ().

Poniżej znajduje się kod tego porównania:

#włączać
#włączać
#włączać
void main ()
char str_1 [100] = "hello świat";
char str_2 [100] = „hellor świat”;
int cn;
setLocale (lc_all, „es_ar”);
cn = strcoll (str_1, str_2);
printf („%i”, cn);

Wniosek

W tym artykule z podpowiedzi Linuksa krótko wyjaśniliśmy, co oznacza kodowanie znaków w informatyce, dzięki czemu masz wyraźniejsze pojęcie o tym, co oznacza kodowanie znaków w zależności od lokalnych konfiguracji używanych przez systemy komputerowe. Następnie pokazaliśmy, jak korzystać z dwóch podstawowych funkcji, które daje język C, aby obsłużyć sznurki do zestawienia postaci. Mamy nadzieję, że ten artykuł jest dla Ciebie przydatny. Aby uzyskać więcej artykułów na temat porad C Language i Linux, użyj wyszukiwarki witryny.