【问题标题】:Objective C : Find number of operators in a mathematical string目标C:查找数学字符串中的运算符数量
【发布时间】:2016-01-27 07:04:56
【问题描述】:

我正在使用以下技术来查找数学字符串中的运算符数。

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

我的教练说这个方法不是很好。我想知道有没有更好/更优雅的方法来做到这一点。谢谢。

【问题讨论】:

  • 您的方法的优点是简短、简单、中肯。它是最有效的吗?可能不是。这有关系吗?可能不会。
  • 这就是我的想法,但需要取悦这个家伙。好的
  • 你得问问你的教练他说的“优雅”是什么意思。因为这显然是基于意见的。
  • @Larme ha。我宁愿不。 :P

标签: objective-c nsstring unichar


【解决方案1】:

似乎要对字符串进行评估。该评估的一部分是解析。在这个过程中,数学运算符被识别并可以被计数。

相对于简单字符计数的优势在于将3 - 1(运算符)与-1(负数文字)区分开来。

【讨论】:

  • 我实际上并没有解析字符串,但我强迫用户输入一个有效的字符串。无论如何,谢谢。
【解决方案2】:

你可以做这样的事情。与您的代码相比,它并不是特别有效,但看起来很花哨。

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. 过滤掉长度为零的元素。

数组中的剩余元素将是运算符。数组中元素的个数就是表达式中运算符的个数。

【讨论】:

  • 很好,为什么要投反对票?可能是因为额外的数组。
  • 有些人投了反对票,因为他们有个人问题,他们会对随机的陌生人提出异议。无论如何,这是我的理论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多