2012-02-05 9 views
14

jak mogę podzielić ciąg @ "Hello" na element tablicy0: "H", element1: "e", element2: "l", element3: "l", item4: "o". Szukałem wszędzie, ale nie mogę znaleźć jak .. :(Podziel NSString na tablicę w Objective-C

oh, w Objective-C, oczywiście.

dzięki za pomoc.

+1

Spójrz w [NSString get -characters] (http://stackoverflow.com/questions/3886882/nsstring-get-characters) i [Jak uzyskać pojedynczą postać NSString z NSStri ng] (http://stackoverflow.com/questions/3836670/how-to-get-a-single-nsstring-character- from-an-nsstring) post. –

Odpowiedz

33

Jeśli jesteś zadowolony z tablicy C char s, spróbuj:

const char *array = [@"Hello" UTF8String]; 

Jeśli potrzebujesz NSArray, spróbuj:

NSMutableArray *array = [NSMutableArray array]; 
NSString *str = @"Hello"; 
for (int i = 0; i < [str length]; i++) { 
    NSString *ch = [str substringWithRange:NSMakeRange(i, 1)]; 
    [array addObject:ch]; 
} 

I array będzie zawierać każdy znak jako element niego.

+0

dzięki, alot man! –

+0

Czy istnieje polecenie zamiany litery w tablicy? jak [tablica replaceObjectAtIndex: 0] hah, coś w tym stylu? jeśli chcę zamienić coś w indeksie tablicy? –

+2

@ H2CO3 zamiast użyć podciągu o zakresie 1, użyj po prostu '-characterAtIndex:'. –

4

Można użyć - (unichar)characterAtIndex:(NSUInteger)index aby uzyskać dostęp do ciągów znaków w każdym indeksie.

Więc

NSString* stringie = @"astring"; 
NSUInteger length = [stringie length]; 
unichar stringieChars[length]; 
for(unsigned int pos = 0 ; pos < length ; ++pos) 
{ 
    stringieChars[pos] = [stringie characterAtIndex:pos]; 
} 
// replace the 4th element of stringieChars with an 'a' character 
stringieChars[3] = 'a'; 
// print the modified array you produced from the NSString* 
NSLog(@"%@",[NSString stringWithCharacters:stringieChars length:length]); 
+0

Czy istnieje polecenie zamiany litery w tablicy? jak [tablica replaceObjectAtIndex: 0] hah, coś w tym stylu? jeśli chcę zamienić coś w indeksie tablicy? –

+0

Teraz masz podstawową tablicę C, którą możesz zmieniać indeksując według indeksu. Zmieniłem swoją odpowiedź, aby odzwierciedlić Twoje dodatkowe pytanie. –

+0

fajny człowiek! wielkie dzięki! –

6

Spróbuj tego:

- (void) testCode 
{ 
    NSString *tempDigit = @"12345abcd" ; 
    NSMutableArray *tempArray = [NSMutableArray array]; 
    [tempDigit enumerateSubstringsInRange:[tempDigit rangeOfString:tempDigit] 
            options:NSStringEnumerationByComposedCharacterSequences 
           usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
      [tempArray addObject:substring] ; 
     }] ; 

    NSLog(@"tempArray = %@" , tempArray); 
} 
+0

Awansuj, aby wiedzieć, jak UTF8 zachowuje się i przechowywać znaki wieloobszarowe (emoji, ccented) razem. –

0

user529758 wspomina, podzielić String - C sposób - takich jak:

const char *array = [@"Hello" UTF8String]; 

Ale wtedy pętla go za pomocą:

for (int i = 0; i < sizeof(array); i++) { 
    doSomethingWithCharacter(array[i]); 
} 
+0

pamiętaj, że 'const char * array' z napisów może kończyć się znakiem NUL w celu zakończenia łańcuchów' '\ 0'', więc twój rozmiar może być o 1 większy niż ilość czytelnych znaków. http://en.wikipedia.org/wiki/Ascii#ASCII_control_code_chart – LenArt