2009-06-15 15 views
13

¿Cómo se codifican las comparaciones Unicode? Necesito probar exactamente como a continuación, buscando letras específicas en una cadena. El código siguiente se ahoga: advertencia: comparación entre puntero y número enteroComparación de caracteres Unicode del objetivo C

for (charIndex = 0; charIndex < [myString length]; charIndex++) 
{ 
    unichar testChar = [myString characterAtIndex:charIndex]; 

    if (testChar == "A") 
     // do something 
    if (testChar == "B") 
     // do something 
    if (testChar == "C") 
     // do something 
} 

Respuesta

18

Para los literales de carbonilla, utilice comillas simples:

if (testChar == 'A') NSLog(@"It's an A"); 

o representan el carácter utilizando el número de puntos de código:

if (testChar == 0x1e01) NSLog(@"It's an A with a ring below"); 

El compilador ve comillas dobles como una cadena, por lo que construye "A" como equivalente a const char * (lo que le da un mensaje de error acerca del puntero).

+0

Gracias! Esto hace exactamente lo que necesito. – Alan

+0

Esto no es realmente correcto. Probar un 'unichar' individual para ver si es una 'A' puede causar problemas; por ejemplo, si alguien escribe 'Ä', puede estar codificado como '0041 0308', en cuyo caso su código detectará la 'A' de el '0041', o podría estar codificado como' 00C4', en cuyo caso su código no lo detectará. – alastair

0

¿Qué estás realmente tratando de hacer? Hacer comparaciones directas de caracteres es inusual. Típicamente -compare: or -isEqual: se usaría para comparar dos cadenas. O NSScanner se usaría para analizar los componentes de una cadena.

+0

Buen punto. No diría que comparar personajes es inusual, pero pasar por cada personaje en una cuerda parece fuera de lo común. Más información de "panorama general" sin duda ayudaría. –

Cuestiones relacionadas