-1

次の手法を使用して、数学文字列内の演算子の数を見つけています。

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

私のトレーナーは、この方法はあまり良くないと言っています。これを行うためのより良い/よりエレガントな方法があることを知りたいです。ありがとう。

4

2 に答える 2

0

文字列が評価されるようです。その評価の一部は解析です。このプロセス中に、数学演算子が識別され、数えられる可能性があります。

単純な文字カウントに対する利点は、3 - 1(演算子) と-1(負数リテラル) を区別できることです。

于 2016-01-27T07:27:53.210 に答える
-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. 長さがゼロの要素を除外します。

配列の残りの要素は演算子になります。配列内の要素の数は、式内の演算子の数です。

于 2016-01-27T09:07:26.480 に答える