私は迅速でONP変圧器を作るしようとしていますので、私は、オペレータ用のマップストリング]>のInt製のStringとして:使用 "+" をスウィフト
- オプス[ "+"] = 1 を
- オプス[ " - "] = 1
- オプス[ "*"] = 2
- オプス[ "/"] = 2
Unfortunetely、私はOPSを呼び出すしようとすると、[ "+"]私はゼロを得た。デバッガは、キーとして "+"と " - "の "データを読み取ることができません"と言います。 "*"と "/"はうまく動作します。 文字列として使用するために+ - の前に入力する特殊文字はありますか?
編集。
class ONP {
let equation:String?
var stack = [String]()
var knownOperators = [String:Int]()
init(equation: String?){
self.equation = equation
initOperators()
}
func initOperators(){
knownOperators["+"] = 1
knownOperators["−"] = 1
knownOperators["×"] = 2
knownOperators["/"] = 3
}
func transform() -> [String]?
{
var result = [String]()
if let sequence = splitEquation(){
for op in sequence{
if let operatorPriority = knownOperators[op]
{
while(!stack.isEmpty && (operatorPriority <= knownOperators[stack.last!]))
{
result.append(stack.removeLast())
}
stack.append(op)
}
else {
result.append(op)
}
}
while !stack.isEmpty {
result.append(stack.removeLast())
}
return result
}
return nil
}
private func splitEquation() -> [String]?
{
return equation?.characters.split(" ").map(String.init)
}
}
あなたはコードを含めることができますので、私たちは、これが宣言されている正確にどのように見ることができますか?投稿を編集することができます。コードをコピー&ペーストして選択し、Ctrl + Kを押します。 – Arc676
あなたの '+'は標準のASCIIプラスのようですが、あなたの ' - 'は期待される45の代わりに8722のユニコード値を持っています。 '-'のように複数の文字があるので、 – vacawama
あなたは 'initOperators'を必要としません、演算子をバットの地図リテラルとして定義することができます。 – Alexander