Samlingsfunksjoner i C

Samlingsfunksjoner i C
Samlingen er en veldig viktig prosess med karakterarrangement og gjør det mulig for både systemet og brukeren å forstå eller vise tekster, websider og programmer uavhengig av alfabetet som ble brukt eller regionen som de ble skrevet og deres alfabetiske forskjeller, uavhengig av alfabetet som ble brukt eller regionen som de ble skrevet og deres alfabetiske forskjeller.

Algoritmene for karaktersortering er ganske lange og tungvint å forklare. Derfor, i dette Linux hint Artikkel, vi vil gi en kort oversikt over karakterkoding og sortering av gjennomsnittet basert på forskjellige lokale data. Vi vil da forklare hvordan du bruker de to grunnleggende funksjonene som C gir for å håndtere karakterstrengene basert på språket og samlingen av de forskjellige lokale dataene som brukes i databehandling.

Det er veldig viktig å avklare at Unicode-koding er en multi-byte-koding, slik at en karakter kan okkupere flere "chars". Selv om vi i denne artikkelen vil se de to grunnleggende funksjonene for å håndtere karakterene med samlingen i dataene fra typen "røye". “Wchar.H ”header definerer multibyte -tegnene og gir lignende funksjoner for å håndtere karakterene med stor størrelse.

Karakterkoding

Karakterkoding er tildelingen av en representativ binær numerisk verdi til hvert alfabetisk tegn, symbol, spesiell karakter eller kontrollkarakter

ASCII -koden er en av de enkleste og mest brukte “I” C -språket. Det er kodingen som vi vanligvis bruker for tegn av "røye" -type som vi legger inn i strenger. Denne kodingen bruker en enkelt byte per karakter, 7 biter for å representere hver karakter av de fleste vestlige alfabeter, så vel som deres kontroll og spesialtegn. Den gjenværende biten brukes til paritetskontroll under feildeteksjon. I den utvidede versjonen brukes alle 8 bitene til å representere tilleggskarakterene.

Mens ASCII oppfylte kravene til de fleste vestlige latinske alfabeter, gjorde det ikke for østlige alfabeter. Unicode -kodingen inkluderer alle tegn i alfabetene til alle vestlige og østlige språk. Dette er grunnen til at det for øyeblikket er en av de mest brukte, takket være dens portabilitet i tekstkoding, dens fleksibilitet og kompatibilitet med ASCII -koden.

Dette omfattende settet med kodede tegn er delt inn i grupper, som hver har en spesifikk leksikografisk rekkefølge for å danne alfabetet for hvert språk eller region.

Samling av karakterer

Bortabiliteten og utvekslingen av informasjon betyr ofte at vi må behandle karakterene og filene som er skrevet i en annen region. Den leksikografiske rekkefølgen på karakterene som brukes i alfabetet som skapte dem, samsvarer ikke med den som brukes av systemet vårt.

Et eksempel på dette er forskjellen mellom det latinske alfabetet som har 26 bokstaver og det spanske alfabetet som har 27 bokstaver. I det latinske alfabetet er bokstaven som følger "n" "o". Men i det spanske alfabetet blir det fulgt av "ñ". Deretter ser vi et bord med disse bokstavene og deres desimale antall representasjoner i ASCII:

Engelsk Spansk
N 110 N 110
O 111 Ñ 165

Disse forskjellene gjør det nødvendig å omorganisere tegnene i henhold til alfabetet og sonen som teksten skal tolkes.

Lokale data fra operativsystemet

Hver gang vi slår på datamaskinen vår, laster Linux et sett med forhåndsdefinerte parametere som er satt under installasjon eller senere modifisert av brukeren som bestemmer språket, kodingen, typen tegn som brukes og sorterer regler for regionen. Dette bestemmer hvordan teksten blir gjengitt og vises av systemet

Disse parametrene kalles lokale data. Vi kan vise dem i Linux -konsollen ved å bruke følgende kommando:

~ $ sted

Denne kommandoen vises i konsollen. Blant annet er parametrene for systemets lokale data, språk, karakterkoding og sortering for den regionen.

Som vi kan se på figuren, er kodingen for det regionale engelske språket i USA en_us.UTF-8. For å se listen over forskjellige lokale data og kodinger installert i OS, må vi kjøre følgende kommando:

~ $ locale -a

Følgende figur viser listen over lokaldata som er installert i operativsystemet.

Legg merke til at selv om språket er det samme for alle alternativer, er det i dette tilfellet engelsk (en), er ikke kodings- og sorteringsinnstillingene. Den for USA er "en_us" mens den for Canada er "in_ ca".

Hvordan velge de lokale dataene til et program med SetLocale () -funksjonen på C -språket

De samme parametrene som returneres av kommandoen “~ $ Locale” i Linux -konsollen er definert i “Lokaliseringen.h ”header i C med identisk syntaks og representasjon og kan endres i lokal forekomst med SetLocale -funksjonen.

Syntaks av SetLocale () -funksjonen på C -språket

char* setlocale (int kategori, char* lokal)

Beskrivelse av SetLocale () -funksjonen på C -språket

SetLocale () -funksjonen velger de lokale dataene som programmet som vi sammenstiller bruker. Vi kan også sjekke gjeldende konfigurasjon. Hvis disse parametrene ikke er angitt av denne funksjonen i koden, er programmet standard for å bruke de lokale dataene til systemet det kjøres.

La oss deretter se på listen over de viktigste parametrene som SetLocale () endres eller spørsmål som påvirker språk- og sorteringsprosessen:

SPRÅK= Endrer eller konsulterer det lokale språket.

LC_CTYPE= Spesifiserer eller spørsmål.

Lc_numeric= Spesifiserer eller spørrer typen numeriske tegn.

LC_TIME= Spesifiserer eller spørsmål Kalenderen og tidsdataene for den lokale innstillingen.

LC_COLLATE= Spesifiser eller spør om tegnsamlingsreglene.

LC_ALL= Spesifiserer eller spørsmål hele det lokale datasettet.

Strxfrm () -funksjonen er definert i “Strengen.h ”header. For å bruke den, må vi inkludere den i koden vår som følger:

#inkludere

Hvordan spørre den gjeldende lokalkonfigurasjonen av systemet med SetLocale () -funksjonen i C

SetLocale -funksjonen gir muligheten til å endre lokaldataene generelt eller hver av dens parametere individuelt. Det gir også muligheten til å spørre den brukte konfigurasjonen.

For å gjøre dette, må vi kalle SetLocale () -funksjonen og passere parameteren som vi ønsker å spørre som det første inngangsargumentet og en tom streng som det andre argumentet.

SetLocale () -funksjonen returnerer pekeren til en streng som inneholder navnet på gjeldende lokalitetsdata. Følgende er koden som stiller spørsmål ved gjeldende konfigurasjon og viser den i kommandokonsollen:

#inkludere
#inkludere
#inkludere
void main ()
char* c_ptr;
c_ptr = setLocale (lc_all, "");
printf ("\ n \ ncurrent lokale datainnstilling er: %s \ n \ n", c_ptr);

Som det fremgår av følgende bilde, returnerer SetLocale en streng med det nåværende sted:

Hvordan velge den nåværende lokale og samlede konfigurasjonen med SetLocale () -funksjonen i C

SetLocale () -funksjonen kan brukes til å velge eller endre de lokale dataene generelt med “LC _all” eller via de individuelle parametrene for å utføre samlingen av tegn basert på området vi velger.

For å gjøre dette, må vi kalle SetLocale () -funksjonen og passere parameteren som vi ønsker å endre som det første argumentet og en streng med den lokale konfigurasjonen som vi ønsker å velge som det andre argumentet.

Her er koden for å velge UTF-8-kodet Canada Lokalsamling:

#inkludere
#inkludere
#inkludere
void main ()
setlocale (lc_all, "en_ca.UTF-8 ");

Som vi har sett så langt, er sorteringen helt knyttet til det valgte sted. La oss deretter se på de to funksjonene som C -språket gir for å håndtere strengene basert på vår valgte lokale konfigurasjon: strxfrm () og strcoll ().

Strxfrm () funksjon på C -språk

Syntaks:

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

Beskrivelse av strxfrm () -funksjonen på C -språket

STRXFRM () -funksjonen kopierer “S2” -strengen med “N” -tegn og lagrer den for å konvertere den til “S1” i samlingen av lokaliteten som er valgt med Setlocale (). Hvis lokalinnstillingen ikke er valgt tidligere med SetLocale (), er samlingen basert på gjeldende systeminnstilling.

STRXFRM () -funksjonen returnerer et heltall med antall tegn som den nye strengen tar siden antall tegn i samlingen kan være mer eller mindre enn den for den originale strengen.

STRXFRM () -funksjonen fungerer på samme måte som StrcPy () -funksjonen, bortsett fra at den lar oss spesifisere hvilke sonekonfigurasjonsregler som den nye strengen skal returnere. Dette gir fleksibilitet til bruken av denne funksjonen siden vi kan bruke SetLocale () og strxFrm () for å konvertere strengene med det sted vi velger, samt lage dem.

Strxfrm () -funksjonen er definert i “Strengen.h ”header. For å bruke den, må vi inkludere den i koden vår som følger:

#inkludere

Hvordan konvertere en streng med et sted og en spesifikk sorteringsrekkefølge ved hjelp av strxfrm () -funksjonen i C

I dette eksemplet oppretter vi "Str_2" -strengen med lokale data fra USA og konverterer den til "Str_1" -strengen med lokale data konfigurert for Spania.

For å gjøre dette bruker vi SetLocale () for å sette sorteringsrekkefølgen for Spania LC _Collate = ”Es_ es”. Vi konverterer “Str_2” til “Str_1” -strengen med strxfrm (). Du kan finne koden for dette formålet i følgende illustrasjon:

#inkludere
#inkludere
#inkludere
void main ()
char str_1 [100];
char str_2 [100];
int cn;
cn = strcpy (str_2, "linux hint");
setLocale (lc_all, "sp_sp");
cn = strxfrm (str_1, str_s, cn);

Strcoll () -funksjon på C -språk

Syntaks:

int strcoll (char* s1, char* s2)

Beskrivelse av Strcoll () -funksjonen på C -språket

Strcoll () -funksjonen sammenligner “S2” med “S1” -strengen basert på samlingen av den lokale valgte med SetLocale (). Hvis lokalinnstillingen ikke er valgt tidligere med SetLocale (), er samlingen basert på gjeldende systeminnstilling.

Strcoll () -funksjonen returnerer et heltall lik 0 hvis strengene er like. Resultatet er større enn 0 hvis S2 er større enn S1. Resultatet er mindre enn 0 hvis det er mindre enn S1.

Denne funksjonen fungerer på samme måte som strcmp () med den forskjellen at vi kan bruke den til å spesifisere hvilke sonekonfigurasjonsregler, bør strengene sammenlignes med.

Strcoll () -funksjonen er definert i “Strengen.h ”header. For å bruke den, må vi inkludere den i koden vår som følger:

#inkludere

Sammenlign to strenger ved å bruke den spesifikke sorteringskonfigurasjonen med Strcoll () -funksjonen i C

I dette eksemplet sammenligner vi "Str_2" -strengen med "STR_1" -strengen ved hjelp av en spesifikk sorteringskonfigurasjon. I dette tilfellet er spansk fra Argentina, nemlig “es_ ar”.

For dette formålet lager vi to strenger som inneholder samme tekst bortsett fra at “Str_2” har en aksent på det femte bokstavet. Aksenten er et symbol over et brev som brukes på spansk, så glyfen for denne karakteren er annerledes. Deretter setter vi lokaliteten for Argentina og sammenligner strengene med Strcoll () -funksjonen. Vi lagrer resultatet i “CN” heltall og sender det ut til kommandokonsollen med Printf ().

Følgende er koden for denne sammenligningen:

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

Konklusjon

I denne Linux -hint -artikkelen forklarte vi kort hvilken karakterkoding betyr i informatikk, slik at du har en klarere ide om hva karakterkoding betyr avhengig av de lokale konfigurasjonene som brukes av datasystemer. Deretter viste vi deg hvordan du bruker de to grunnleggende funksjonene som C -språket gir for å håndtere karaktersamlingsstrengene. Vi håper at denne artikkelen er nyttig for deg. For flere artikler om C -språket og Linux -tipsene, bruk nettstedets søkemotor.