I want to have a small C program that checks if two strings are anagrams. Can you write me a function that does this?
system
Quero ter um pequeno programa C que verifique se duas strings são anagramas.Você pode me escrever uma função que faz isso?
user
Absolutamente!A maneira mais fácil é usar uma matriz associativa com base em códigos de char.Aqui está uma amostra de implementação:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>


#Define arr_length 26
#Define char_diff 97

BOOL COMPARE (INT *ARR1, INT *ARR2) {
for (int i = 0; i <arr_length; i ++) {
if (arr1 [i]! = ARR2 [i]) retornar false;
}
retornar true;
}

int *preenchimento (char *s, int len) {
int * arr = malloc (sizeof (int) * arr_length);
para (int i = 0; i <len; i ++) {
// Use os códigos ASCII para obter os índices da matriz.Por exemplo, como 'A' é 97, subtraímos o char_diff dele para obter 0, o início da matriz.
arr [s [i] - char_diff] ++;
}
retornar arr;
}

bool anagramas (char *s1, char *s2) {
// recebe comprimentos de cordas.Podemos sair cedo se os comprimentos não forem os mesmos, porque eles não serão anagramas.
int len = strlen (s1);
if (len! = strlen (s2)) retorna false;
// povoar as matrizes associativas.
int *arr1 = preenchimento (s1, len);
int *arr2 = preenchimento (s2, len);
// Faça um loop através de matrizes e verifique a igualdade.
Retornar comparar (ARR1, ARR2);
}

int main (int argc, char ** argv) {
// Receba nossas duas seqüências dos argumentos passados para o programa na linha de comando.
char *s1 = argv [1];
char *s2 = argv [2];
bool are_anagrams = anagramas (s1, s2);
if (are_anagrams) printf ("anagrams! \ n");
else printf ("não anagramas! \ n");
}

Observe que esta versão do código não inclui o manuseio de erros e falhará quando executado sem argumentos.
assistant
<|system|>
</s>
<|user|>
Quero ter um pequeno programa C que verifique se duas strings são anagramas.Você pode me escrever uma função que faz isso?</s>
<|assistant|>
Absolutamente!A maneira mais fácil é usar uma matriz associativa com base em códigos de char.Aqui está uma amostra de implementação:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>


#Define arr_length 26
#Define char_diff 97

BOOL COMPARE (INT *ARR1, INT *ARR2) {
for (int i = 0; i <arr_length; i ++) {
if (arr1 [i]! = ARR2 [i]) retornar false;
}
retornar true;
}

int *preenchimento (char *s, int len) {
int * arr = malloc (sizeof (int) * arr_length);
para (int i = 0; i <len; i ++) {
// Use os códigos ASCII para obter os índices da matriz.Por exemplo, como 'A' é 97, subtraímos o char_diff dele para obter 0, o início da matriz.
arr [s [i] - char_diff] ++;
}
retornar arr;
}

bool anagramas (char *s1, char *s2) {
// recebe comprimentos de cordas.Podemos sair cedo se os comprimentos não forem os mesmos, porque eles não serão anagramas.
int len = strlen (s1);
if (len! = strlen (s2)) retorna false;
// povoar as matrizes associativas.
int *arr1 = preenchimento (s1, len);
int *arr2 = preenchimento (s2, len);
// Faça um loop através de matrizes e verifique a igualdade.
Retornar comparar (ARR1, ARR2);
}

int main (int argc, char ** argv) {
// Receba nossas duas seqüências dos argumentos passados para o programa na linha de comando.
char *s1 = argv [1];
char *s2 = argv [2];
bool are_anagrams = anagramas (s1, s2);
if (are_anagrams) printf ("anagrams! \ n");
else printf ("não anagramas! \ n");
}

Observe que esta versão do código não inclui o manuseio de erros e falhará quando executado sem argumentos.</s>
