¿Cuál es el propósito de “A_to_a” en esta comparación de cadenas?
En alguna parte de un código para comparar dos cadenas vi esto:
define A_a ('a'-'A')
...
for (i = 0; i < n; i++) {
if (!(word[i] == (tmpP -> word[i])) && !(word[i] == (tmpP -> word[i] + A_a)) && !(word[i] == (tmpP -> word[i] - A_a))) {
found = 0;
break;
}
}
if (i==n) {
found = 1;
break;
}
Supongo que quiere considerar las mayúsculas y minúsculas como similares, pero ¿cómo funciona con la frase A_a?
davy.ai
La macro
A_to_a
calcula la diferencia en valores ASCII entre'a'
y'A'
, que es 32. Este valor se utiliza luego para comprobar si un carácter enword
es igual al carácter correspondiente entmpP->word
, sin importar mayúsculas o minúsculas.Por ejemplo, si
word[i]
es'A'
, la primera comparación!(word[i] == (tmpP->word[i]))
fallaría porque'A'
no es igual a'a'
. Pero la segunda comparación!(word[i] == (tmpP->word[i] + A_to_a))
pasaría porque'A' + 32
es igual a'a'
, lo cual es lo mismo quetmpP->word[i]
.De manera similar, si
word[i]
es'a'
, la tercera comparación!(word[i] == (tmpP->word[i] - A_to_a))
pasaría porque'a' - 32
es igual a'A'
, lo cual es lo mismo quetmpP->word[i]
.En general, la macro
A_to_a
ayuda a tener en cuenta las comparaciones que no distinguen entre mayúsculas y minúsculas, ajustando el valor ASCII de cada carácter según sea necesario.