Funções de agrupamento em c

Funções de agrupamento em c
O agrupamento é um processo muito importante de arranjo de caráter e permite que o sistema e o usuário entendam ou exibam corretamente os textos, páginas da Web e programas, independentemente do alfabeto usado ou da região em que foram escritos e suas diferenças alfabéticas.

Os algoritmos para classificação de personagens são bastante longos e pesados ​​para explicar. Portanto, neste Linux Dica Artigo, daremos uma breve visão geral do personagem que codifica e classifica a média com base em vários dados locais. Em seguida, explicaremos como usar os dois recursos básicos que C fornece para lidar com as seqüências de caracteres com base no idioma e no agrupamento dos vários dados locais usados ​​na computação.

É muito importante esclarecer que a codificação do Unicode é uma codificação de vários bytes, para que um personagem possa ocupar vários "chars". Embora, neste artigo, veremos as duas funções básicas para lidar com os personagens com agrupamento nos dados do tipo "char". O “wchar.O cabeçalho H ”define os caracteres multibyte e fornece funções semelhantes para lidar com os personagens com tamanho grande.

Codificação de caracteres

A codificação de caracteres é a atribuição de um valor numérico binário representativo para cada caráter alfabético, símbolo, caráter especial ou caráter de controle

O código ASCII é um dos mais simples e amplamente utilizados idioma "I" C. É a codificação que geralmente usamos para caracteres do tipo "char" que colocamos em strings. Essa codificação usa um único byte por personagem, 7 bits para representar cada personagem da maioria dos alfabetos ocidentais, bem como seu controle e caracteres especiais. O bit restante é usado para verificação de paridade durante a detecção de erros. Na versão estendida, todos os 8 bits são usados ​​para representar os caracteres adicionais.

Enquanto as ASCII atendiam aos requisitos da maioria dos alfabetos latinos ocidentais, não foi para alfabetos orientais. A codificação Unicode inclui todos os personagens dos alfabetos de todas as línguas ocidentais e orientais. É por isso que é atualmente um dos mais amplamente utilizados, graças à sua portabilidade na codificação de texto, sua flexibilidade e compatibilidade com o código ASCII.

Este extenso conjunto de caracteres codificados é dividido em grupos, cada um dos quais tem uma ordem lexicográfica específica para formar o alfabeto para cada idioma ou região.

Agrupamento de personagens

A portabilidade e a troca de informações geralmente significam que precisamos processar os caracteres e arquivos escritos em outra região. A ordem lexicográfica dos personagens usados ​​no alfabeto que os criou não corresponde à que é usada pelo nosso sistema.

Um exemplo disso é a diferença entre o alfabeto latino, que tem 26 letras e o alfabeto espanhol que tem 27 letras. No alfabeto latino, a letra que segue o "n" é o "O". Mas no alfabeto espanhol, é seguido por "ñ". Em seguida, vemos uma tabela com essas cartas e seu número decimal de representação no ASCII:

Inglês Espanhol
N 110 N 110
O 111 Ñ 165

Essas diferenças tornam necessário reorganizar os caracteres de acordo com o alfabeto e a zona em que o texto deve ser interpretado.

Dados locais do sistema operacional

Toda vez que ligamos nosso computador, o Linux carrega um conjunto de parâmetros predefinidos definidos durante a instalação ou posteriormente modificados pelo usuário que determina o idioma, a codificação, o tipo de caracteres usados ​​e as regras de classificação para a região. Isso determina como o texto é renderizado e exibido pelo sistema

Esses parâmetros são chamados de dados locais. Podemos exibi -los no console Linux usando o seguinte comando:

~ $ Locale

Este comando é exibido no console. Entre outras coisas, os parâmetros para os dados locais do sistema, idioma, codificação de caráter e classificação para essa região.

Como podemos ver na figura, a codificação para a língua inglesa regional dos Estados Unidos é en_us.UTF-8. Para ver a lista de diferentes dados e codificações locais instalados em nosso sistema operacional, precisamos executar o seguinte comando:

~ $ loce -a

A figura a seguir mostra a lista de dados de localidade que estão instalados no sistema operacional.

Observe que, embora o idioma seja o mesmo para todas as opções, neste caso é o inglês (en), as configurações de codificação e classificação não são. O para os Estados Unidos é "en_Us", enquanto o do Canadá é "in_ ca".

Como selecionar os dados locais de um programa com a função setLocale () na linguagem C

Os mesmos parâmetros que são retornados pelo comando “~ $ loce” no console Linux são definidos no “Locale.H ”Cabeçalho em C com sintaxe e representação idêntica e pode ser alterado na instância local com a função Setlocale.

Sintaxe da função setLocale () na linguagem C

char* setLocale (categoria int, char* local)

Descrição da função setLocale () na linguagem C

A função setLocale () seleciona os dados locais que o programa que estamos compilando usa. Também podemos verificar a configuração atual. Se esses parâmetros não forem definidos por esta função no código, o programa padrão usará os dados locais do sistema no qual ele é executado.

Em seguida, vejamos a lista dos parâmetros mais importantes que o setLocale () altera ou consultas que afetam o processo de linguagem e classificação:

LINGUAGEM= Modifica ou consulta o idioma local.

LC_CTYPE= Especifica ou consulta o tipo de caractere para o local.

Lc_numeric= Especifica ou consulta o tipo de caracteres numéricos.

Lc_time= Especifica ou consulta os dados do calendário e do tempo para a configuração local.

LC_COLLATE= Especifique ou consulte as regras de agrupamento de personagens.

Lc_all= Especifica ou consulta todo o conjunto de dados local.

A função strxfrm () é definida na “string.H ”cabeçalho. Para usá -lo, precisamos incluí -lo em nosso código da seguinte forma:

#incluir

Como consultar a configuração atual do local do sistema com a função setLocale () em c

A função setLocale fornece a capacidade de alterar os dados do local em geral ou cada um de seus parâmetros individualmente. Ele também oferece a possibilidade de consultar a configuração usada.

Para fazer isso, devemos chamar a função setLocale () e passar no parâmetro que queremos consultar como o primeiro argumento de entrada e uma string vazia como o segundo argumento.

A função setLocale () retorna o ponteiro para uma string que contém o nome dos dados atuais da localidade. A seguir, é apresentado o código que consulta a configuração atual e o exibe no console de comando:

#incluir
#incluir
#incluir
void main ()
char* c_ptr;
c_ptr = setLocale (lc_all, "");
printf ("\ n \ \ ncurrent Local Data Setting é: %s \ n \ n", c_ptr);

Como visto na imagem a seguir, o Setlocale retorna uma string com a localidade atual:

Como selecionar a configuração atual e de agrupamento com a função setLocale () em c

A função setLocale () pode ser usada para selecionar ou alterar os dados locais em geral com "LC _All" ou através dos parâmetros individuais para executar o agrupamento de caracteres com base no intervalo que escolhemos.

Para fazer isso, precisamos chamar a função setLocale () e passar no parâmetro que queremos mudar como o primeiro argumento e uma string com a configuração local que queremos selecionar como o segundo argumento.

Aqui está o código para selecionar o UTF-8 codificado Canada Locale Collation:

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

Como vimos até agora, a classificação está completamente ligada ao local selecionado. Em seguida, vejamos as duas funções que o idioma C fornece para lidar com as strings com base em nossa configuração local escolhida: strxfrm () e strcoll ().

Função strxfrm () na linguagem c

Sintaxe:

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

Descrição da função strxfrm () na linguagem C

A função strxfrm () copia a sequência "S2" com caracteres "n" e a armazena para convertê -la para "S1" no agrupamento do local que é selecionado com setLocale (). Se a configuração do local não for selecionada anteriormente com setLocale (), o agrupamento será baseado na configuração atual do sistema.

A função strxfrm () retorna um número inteiro com o número de caracteres que a nova string leva, pois o número de caracteres no agrupamento pode ser mais ou menos do que o da string original.

A função strxfrm () funciona de maneira semelhante à função strcpy (), exceto que nos permite especificar quais regras de configuração de zona que a nova string deve retornar. Isso adiciona flexibilidade ao uso dessa função, pois podemos usar setLocale () e strxfrm () para converter as cordas com a localidade que escolhemos, além de criá -las.

A função strxfrm () é definida na “string.H ”cabeçalho. Para usá -lo, precisamos incluí -lo em nosso código da seguinte forma:

#incluir

Como converter uma string com um local e uma ordem de classificação específica usando a função strxfrm () em c

Neste exemplo, criamos a string "str_2" com dados locais dos Estados Unidos e os convertemos para a string "str_1" com dados locais configurados para a Espanha.

Para fazer isso, usamos o setLocale () para definir a ordem de classificação para a localidade da Espanha LC _Collate = "es_ es". Convertemos "str_2" na sequência "str_1" com strxfrm (). Você pode encontrar o código para esse fim na seguinte ilustração:

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

Função strColl () na linguagem C

Sintaxe:

int strcoll (char* s1, char* s2)

Descrição da função strColl () na linguagem C

A função strcoll () compara a string "S2" com "S1" com base no agrupamento do local selecionado com o setLocale (). Se a configuração do local não for selecionada anteriormente com setLocale (), o agrupamento será baseado na configuração atual do sistema.

A função strColl () retorna um número inteiro igual a 0 se as cordas forem iguais. O resultado é maior que 0 se S2 for maior que S1. O resultado é menor que 0 se for menor que S1.

Esta função funciona de maneira semelhante a strcmp () com a diferença que podemos usá -la para especificar quais regras de configuração de zona fazem as seqüências de strings devem ser comparadas a.

A função strColl () é definida na “string.H ”cabeçalho. Para usá -lo, temos que incluí -lo em nosso código da seguinte forma:

#incluir

Compare duas strings usando a configuração de classificação específica com a função strColl () em c

Neste exemplo, comparamos a sequência "str_2" com a string "str_1" usando uma configuração de classificação específica. Nesse caso, é espanhol da Argentina, ou seja, "es_ ar".

Para esse fim, criamos duas cordas que contêm o mesmo texto, exceto que "str_2" tem um sotaque na quinta letra. O sotaque é um símbolo sobre uma letra usada em espanhol, então o glifo para esse personagem é diferente. Em seguida, definimos o local da Argentina e comparamos as strings com a função strColl (). Armazenamos o resultado no número inteiro "CN" e otemos para o console de comando com printf ().

A seguir, o código para esta comparação:

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

Conclusão

Neste artigo do Linux Dint, explicamos brevemente o que a codificação de personagens significa na ciência da computação, para que você tenha uma idéia mais clara do que a codificação de personagens significa dependendo das configurações locais usadas pelos sistemas de computador. Em seguida, mostramos como usar os dois recursos básicos que o idioma C fornece para lidar com as seqüências de agrupamento de personagens. Esperamos que este artigo seja útil para você. Para obter mais artigos sobre as dicas de idioma C e Linux, use o mecanismo de pesquisa do site.