2016-01-27 8 views
-1

Я использую следующую технику, чтобы найти число операторов в математической строке.Цель C: Найти число операторов в математической строке

for (int index = 0; index < [self.evaluateString length]; index++) { 
    unichar chars = [self.evaluateString characterAtIndex:index]; 
    if (chars == '+' || chars == '-' || chars == '*' || chars == '/' ||chars == '^') { 
     self.operatorCount++; 
    } 
} 

Мой тренер говорит, что этот метод не очень хорош. Я хотел бы знать, есть ли лучший/более элегантный способ сделать это. Благодарю.

+1

Ваш метод имеет то преимущество, что он является коротким, простым и точным. Это наиболее эффективно? Возможно нет. Это имеет значение? Возможно нет. – Avi

+0

Вот что я подумал, но нужно порадовать парня. Ok – Rishab

+0

Вы должны спросить своего тренера, что он имеет в виду с «элегантным». Потому что это ясно мнение основано. – Larme

ответ

0

Кажется, что строка должна быть оценена. Часть этой оценки анализируется. Во время этого процесса математические операторы идентифицируются и могут быть подсчитаны.

Преимущество перед простыми подсчетами персонажей заключается в том, чтобы отличить 3 - 1 (оператор) от -1 (литерал отрицательного числа).

+0

Я на самом деле не разбираю строку, но я заставляю пользователя поставить допустимую строку. Спасибо, в любом случае. – Rishab

-1

Вы можете сделать что-то подобное. Это не особенно эффективно, по сравнению с вашим кодом, но это выглядит странно.

NSString *s = @"3 + 1 - 2 * 4/4"; 

NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"+-*/"] invertedSet]; 

NSArray *a = [[s componentsSeparatedByCharactersInSet:cs] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 

NSLog(@"%lu", a.count); 

NSLog() напечатает 4, как и ожидалось.

Алгоритм прост:

  1. Создать набор символов, который является инверсией списка операторов.
  2. Разделите строку выражения инвертированным набором символов.
  3. Отфильтровать элементы нулевой длины.

Остальные элементы в массиве будут операторами. Количество элементов в массиве - это счетчик операторов в выражении.

+0

приятно, почему нисходящий? Возможно, из-за дополнительного массива. – Rishab

+0

Некоторые люди голосуют за то, что у них есть личные проблемы, которые они вызывают на случайных незнакомцев. Во всяком случае, это моя теория. – Avi