Есть ли метод, который может взять «один» и вернуть «1»? - PullRequest
0 голосов
/ 26 марта 2012

Я посмотрел на NSNumberFormatter, но это не сработало, так есть ли способ парсинга записанных чисел и превращения их в реальные числа?

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Примерно так будет работать (для положительных целых чисел в любом случае). Это только отправная точка, вам нужно проверить правильность слов и, возможно, игнорировать заглавные буквы, чтобы сделать их более надежными:

 [self parseNumberWords:@"five two three"];


-(NSInteger)parseNumberWords:(NSString *)input {
NSArray *wordArray = [NSArray arrayWithObjects:@"zero",@"one",@"two",@"three",@"four",@"five",@"six",@"seven",@"eight",@"nine", nil];
NSArray *words = [input componentsSeparatedByString:@" "];
NSInteger num = 0;
NSInteger j =0;
for (NSInteger i = [words count]; i>0 ;i--) {
    num = num + [wordArray indexOfObject:[words objectAtIndex:i-1]] * pow(10, j);
    j = j+1;
}
NSLog(@"%ld",num);
return num;

}

0 голосов
/ 26 марта 2012

NSNumberFormatter поможет вам пройти через NSNumberFormatterSpellOutStyle. Базовое форматирование, которое делает NSNumber, завершит его.

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterSpellOutStyle];
NSString * numberWordString = @"three one two";
NSMutableString * digitString = [[NSMutableString alloc] init];
// Break up the input string at spaces and iterate over the result
for(NSString * s in [numberWordString componentsSeparatedByString:@" "]){
    // Let the formatter turn each string into an NSNumber, then get
    // the stringValue from that, which will be a digit.
    [digitString appendString:[[nf numberFromString:s] stringValue]] ;
}        
NSLog(@"%@", digitString);    // prints "312"

Очевидно, что вам придется приложить некоторые усилия для обработки различных форматов ввода, строчных букв, неправильного ввода (произойдет сбой, если nf не удастся отформатировать - он вернет nil, что является недопустимым аргументом для appendString:) и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...