2009-06-15 23 views
13

Come vengono codificati i confronti unicode? Devo testare esattamente come sotto, controllando la presenza di lettere specifiche in una stringa. Il codice qui sotto soffoca: avvertimento: Confronto tra il puntatore e di interiConfronto di caratteri unicode oggettivo 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 
} 

risposta

18

Per letterali char, Usa virgolette singole:

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

né rappresentano i caratteri utilizzando il numero del punto di codice:

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

Il compilatore vede le virgolette come una stringa, quindi crea "A" come equivalente a const char * (che ti dà un messaggio di errore sul puntatore).

+0

Grazie! Questo fa esattamente quello di cui ho bisogno. – Alan

+0

Questo non è proprio corretto. Provare un singolo 'unichar' per vedere se è un 'A' può causare problemi - per esempio, se qualcuno scrive 'Ä', potrebbe essere codificato come' 0041 0308', nel qual caso il codice rileverà 'A' da il '0041', o potrebbe essere codificato come' 00C4' nel qual caso il tuo codice non lo riconoscerà. – alastair

0

Cosa stai cercando di fare davvero? Fare confronti diretti tra personaggi è inusuale. In genere -compare: o -isEqual: verrebbe utilizzato per confrontare due stringhe. O NSScanner verrebbe utilizzato per analizzare i componenti di una stringa.

+0

Buon punto. Non direi che paragonare i personaggi sia inusuale, ma il looping di ogni personaggio in una stringa sembra fuori dall'ordinario. Altre informazioni di "grande immagine" sarebbero certamente di aiuto. –