Изменение окончания слова в зависимости от числа

При написании одной программы я столкнулся с такой проблемой как изменение окончаний слов в зависимости от числа.
Поискав решение в интернете, я обнаружил, что написанные функции не были универсальны, а некоторые из них были написаны не оптимально.
Тогда я решил написать свою функцию.

Алгоритм решения задачи:
Например, мы хотим склонять слово “ страница”.
Слово “страница” добавляется ко всем числам, последняя (или единственная) цифра числа которого равна 1.
Слово «Страниц» ставится для чисел, оканчивающегося на 0, 5, 6, 7, 8, 9 или числа 11, 12, 13, 14 (или имеющие такой остаток от деления на 100). Во всех остальных случаях используется слово «страницы”.

Для того чтобы определить, на какую цифру заканчивается число, надо найти остаток от его деления на 10.
Для обеспечения универсальности функция будет принимать  параметры — число  и массив со словами, которые будут склоняться в зависимости от числа.

- (NSString *)terminationForValue:(int)value withWords:(NSArray *)words {
    if (words.count != 3) {
        return nil;
    }
    int dd = (int)floor(value) % 100;
    int d = (int)floor(value) % 10;
   
    if(d == 0 || d > 4 || dd == 11 || dd == 12 || dd == 13 || dd == 14) return words[0];
    if(d != 1 && d < 5) return words[1];
    if(d == 1) return words[2];
    
    return words[0];    
}

Можно также создать тестовый цикл для проверки функции:

  for (int i = 0; i < 1000; ++i) {
       NSLog(@"%i - %@", i, [self terminationForValue:i withWords:@[@"страниц", @"страницы", @"страница"]]);
    }

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий