2013-03-31 61 views
0

我需要知道如何以正確的順序將整數分成數字,例如, 1234顯示爲1 2 3 4.我希望它分割整數並將數字顯示爲單詞,因此1234 = 1 2 3 4 =一兩三四。這是我到目前爲止。它分割一個整數並將數字顯示爲單詞,但它們的順序相反。對不起,如果它有點混亂。此外,我只是剛開始學習目標C,所以我不知道有關數組和所有這些東西。如何將整數分解爲分量數字

int number, right_digit, counter; 

    counter = 1; 

    NSLog(@"Enter your number"); 

    while (counter != 0) { 
    scanf("%i", &number); 


    do { 

    right_digit = number % 10; 
    number /= 10; 



    if (right_digit == 1) 
     NSLog(@"one"); 

    else if (right_digit == 2) 
     NSLog(@"two"); 

    else if (right_digit == 3) 
     NSLog(@"three"); 

    else if (right_digit == 4) 
     NSLog(@"four"); 

    else if (right_digit == 5) 
     NSLog(@"five"); 

    else if (right_digit == 6) 
     NSLog(@"six"); 

    else if (right_digit == 7) 
     NSLog(@"seven"); 

    else if (right_digit == 8) 
     NSLog(@"eight"); 

    else if (right_digit == 9) 
     NSLog(@"nine"); 

    else if (right_digit == 0) 
     NSLog(@"zero"); 

    } 
    while (number != 0); 

    } 
} 
return 0; 
} 
+0

結帳這個相關[問題](http://stackoverflow.com/questions/3377510/convert-number-to-words-in- objective-c)一旦你開始對這種語言和它的API感到舒服。你現在開始一個好的開始。 – Anurag

回答

3

你這樣做是正確的本質,除了你應該保存的話(或數字),與您經過原來的號碼,然後「玩他們向後」爲你打印出來。完成此操作的最簡單方法是使用NSMutableArray:在遍歷數字時向其添加單詞,然後以相反的順序迭代數組以便打印。

一筆記關於您使用switch的:在情況下,當你在所有的情況下做同樣的事情,只有你的數據是不同的,你應該使用數組或字典查詢,像這樣:

NSString *digitWords[] = {@"zero", @"one", @"two", @"three", ...}; 

有了這個數組中的地方,你可以調用

NSLog("%@", digitWords[digit]); 

,並擺脫switch聲明。

+0

@Monolo啊,你是對的!謝謝! – dasblinkenlight

+0

謝謝,但我試圖只使用Objective-C第5版Kochan中的內容,直到第6章(NSArray尚未討論過)。 – kangas08

+0

@Jarryd我用普通的C數組替換了'NSArray'。我沒有那本書,但我認爲C語言很早就被覆蓋了。 – dasblinkenlight

4
NSInteger num=1234; 
NSInteger temp=num; 

NSMutableArray *digits=[NSMutableArray new]; 
while(temp >0){ 
    NSInteger digit=temp%10; //4 
    temp/=10;//123 
    digits[digits.count][email protected](digit); 
} 

for(NSNumber *d in [digits reverseObjectEnumerator]){ 
    switch([d integerValue]){ 
     case 0: NSLog(@"Zero"); break; 
     case 1: NSLog(@"One"); break; 
     case 2: NSLog(@"Two"); break; 
     case 3: NSLog(@"Three"); break; 
     case 4: NSLog(@"Four"); break; 
     case 5: NSLog(@"Five"); break; 
     case 6: NSLog(@"Six"); break; 
     case 7: NSLog(@"Seven"); break; 
     case 8: NSLog(@"Eight"); break; 
     case 9: NSLog(@"Nine"); break; 
    } 
} 
2

剛剛修改Anoop維迪回答確切的答案

NSInteger num=1234567890; 
NSInteger temp=num; 

NSMutableArray *digits=[NSMutableArray new]; 
while(temp >0){ 
    NSInteger digit=temp%10; //4 
    temp/=10;//123 
    [digits addObject:[NSString stringWithFormat:@"%d",digit]]; 

} 

NSMutableArray *show = [NSMutableArray new]; 

for(NSNumber *d in [digits reverseObjectEnumerator]){ 
    switch([d integerValue]){ 
     case 0:[show addObject:@"Zero"]; break; 
     case 1:[show addObject:@"One"];  break; 
     case 2:[show addObject:@"Two"];  break; 
     case 3:[show addObject:@"Three"]; break; 
     case 4:[show addObject:@"Four"]; break; 
     case 5:[show addObject:@"Five"]; break; 
     case 6:[show addObject:@"Six"];  break; 
     case 7:[show addObject:@"Seven"]; break; 
     case 8:[show addObject:@"Eight"]; break; 
     case 9:[show addObject:@"Nine"]; break; 
    } 
} 
NSLog(@"%d=%@",num,[show componentsJoinedByString:@", "]);