私は楽しみのための超基本的なプログラミング言語を作るプロジェクトに取り組んでいます。私はprintコマンドを扱っています.2種類のオプション、ダイレクトプリント、スタックからの印刷があります。プログラムはすでにスタックに項目を持っていますが、スタックから印刷するコマンドを実行するたびに、その項目をスキップします。ここに私のコードです:C#の文字列の比較の問題
if (String.Equals(cmds[pos], "print"))
{
if (cmds[pos + 1].StartsWith("\""))
{
Console.Write(cmds[pos + 1].Replace("\"", "").Replace(@"\q", "\"").Replace(@"\n", "\n"));
outPos = pos + 2;
}
else if (string.Equals(cmds[pos + 1], "stack"))
{
Console.WriteLine(strStack.Pop());
outPos = pos + 2;
}
else
{
//Console.WriteLine("HelloKreeKraw");
outPos = pos + 1;
}
}
、ここでは、コマンドは次のとおりです。
push "Hi\n"
throw stack
push "Hello"
print stack
print "World!\n"
end
pushコマンドは、スタックにプッシュして、エンドコマンドがプログラムを終了します。プログラムは理由なくプリントスタックをスキップします。私は何かが欠けていない限り、それができるすべてをテストしましたか?
編集: string.replaceとcmds [pos + 1] .StartsWith( "\" ")はうまく動作しますが、スタックされている2番目の単語があるかどうかを確認するとランダムにグリッチします。
はい、ネストされていない場合はネストされていません。 – Arjang
ブレークポイントを使用して、いくつかの予備的なものを最初にチェックすることはできますか? (配列は0に基づいているので) 'pos'は正しいです。' cmds'配列はスペースなどで正しく分割されます。 –
この行は、Replace()が正しく動作していることを確認します。Console.Write(cmds [pos + 1] .Replace (@ "\ n"、 "\ n")); – MethodMan