![](/img/trans.png)
[英]How to determine if an ScnNode is left or right of the view direction of a camera node in SceneKit
[英]NSExpresseion, determine operating from left-associative
func postFix(_ expr: String) -> Int {
// write your code here
let nums = expr.components(separatedBy:CharacterSet.decimalDigits.inverted)
.joined()
let set = CharacterSet(charactersIn: "+*/%-")
var ch = expr.components(separatedBy: set.inverted).joined()
ch.append(" ")
var rslt = String()
for i in 0..<nums.count {
let index = str.index(str.startIndex, offsetBy: i)
rslt.append(nums[index])
rslt.append(ch[index])
}
let theSet = CharacterSet(charactersIn: "+*/%-0123456789")
let final = rslt.components(separatedBy: theSet.inverted).joined()
let expn = NSExpression(format: final)
let chal = expn.expressionValue(with: nil, context: nil)
return chal as! Int
}
print(postFix("4 1 - 2 *"))
我正在制作一種方法來從未排序的字符串中解析數學運算,我面臨的唯一問題是我無法確定從左關聯進行運算。 而不是 4 - (1 * 2) = 2 我希望它從左側開始並忽略是否以 * 或 / 首先所以 (4 - 1 ) * 2 = 6
我會稍微改變你的邏輯。 首先獲取所有數字和所有運算符,然后獲取第一個元素並將其用作 lhs,迭代數字和刪除第一個數字的運算符。 使用 lhs + 運算符 + 當前數字 (rhs) 構造您的表達式。 將結果分配給 var,下一個 lhs 將是轉換為字符串的結果。 就像是:
func postFix(_ expr: String) -> Int {
let numbers = expr.split(whereSeparator: {!"0123456789".contains($0)})
let operators = expr.split(whereSeparator: {!"+*/%-".contains($0)} )
guard var lhs = numbers.first else { return .zero }
var result = 0
for (rhs, oprtr) in zip(numbers.dropFirst(),operators) {
let format = String([lhs,rhs].joined(separator: " " + oprtr + " "))
result = NSExpression(format: format)
.expressionValue(with: nil, context: nil) as? Int ?? 0
lhs = String(result)[...]
}
return result
}
print(postFix("4 1 - 2 *")) // "6\n"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.