c++ - significativa - prueba de student-newman-keuls(snk)
¿Por qué el alfabeto se divide en múltiples rangos en este código C? (2)
En una biblioteca personalizada vi una implementación:
inline int is_upper_alpha(char chValue)
{
if (((chValue >= ''A'') && (chValue <= ''I'')) ||
((chValue >= ''J'') && (chValue <= ''R'')) ||
((chValue >= ''S'') && (chValue <= ''Z'')))
return 1;
return 0;
}
¿Es eso un huevo de Pascua o cuáles son las ventajas frente al método estándar C / C ++?
inline int is_upper_alpha(char chValue)
{
return ((chValue >= ''A'') && (chValue <= ''Z''));
}
El autor de este código presumiblemente tuvo que admitir
EBCDIC
en algún momento, donde los valores numéricos de las letras no son contiguos (existen lagunas entre
I
,
J
y
R
,
S
, como habrás adivinado).
Vale la pena señalar que los estándares C y C ++ solo garantizan que los caracteres del
0
al
9
tengan valores numéricos contiguos precisamente por esta razón, por lo que ninguno de estos métodos cumple estrictamente los estándares.
Parece que intenta cubrir tanto EBCDIC como ASCII. Su método alternativo no funciona para EBCDIC (tiene falsos positivos, pero no falsos negativos)
C y C ++ requieren que
''0''-''9''
sean contiguos.
Tenga en cuenta que las llamadas a la biblioteca estándar saben si se ejecutan en ASCII, EBCDIC u otros sistemas, por lo que son más portátiles y posiblemente más eficientes.