C# 数组中的元素(从字典值复制时)是反向的
我的目标是用c#制作一个数学表达式解释器,例如,如果你键入“a=3”,它将把a保存为字典键,把3保存为它的值,这个程序有更多的功能,因此如果你键入“B=3”,然后键入“a=B+3”,然后键入“Show(a)”,它必须显示“6”作为答案 在我输入“A=10”、“B=10”、“C=A+B”和最后的“Show(C)”之前,一切都是正确的,因为变量的值是两位数(或更多)的数字。在这种情况下,当生成最终结果时,数字被保存在字符串中,比如“01+01”,而不是“10+10”(因为A和B的值是10,所以A+B应该是10+10),所以有点颠倒 我尝试反转字符串,然后计算答案,但效果不太好,只是出于某种原因,它给了我“1+1” 注:C# 数组中的元素(从字典值复制时)是反向的,c#,expressionengine,C#,Expressionengine,我的目标是用c#制作一个数学表达式解释器,例如,如果你键入“a=3”,它将把a保存为字典键,把3保存为它的值,这个程序有更多的功能,因此如果你键入“B=3”,然后键入“a=B+3”,然后键入“Show(a)”,它必须显示“6”作为答案 在我输入“A=10”、“B=10”、“C=A+B”和最后的“Show(C)”之前,一切都是正确的,因为变量的值是两位数(或更多)的数字。在这种情况下,当生成最终结果时,数字被保存在字符串中,比如“01+01”,而不是“10+10”(因为A和B的值是10,所以A+B
using System;
using System.Collections.Generic;
using System.Linq;
using System.Globalization;
using System.Data;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Welcome To The Program\nCorrect Syntax:");
Console.WriteLine("A=10\nB=15\nC=A+B\nD=13/4-2+A-C+B\nShow(D)");
Console.WriteLine("\nEnter your input:");
Expression E = new Expression();
string expression = "start";
while (expression != "exit")
{
expression = Console.ReadLine();
// for show command
if (expression.Contains("Show") == true)
try { E.Show(expression[5]); }
catch (Exception e)
{
Console.WriteLine("input is not correct, Can not show anything. please try again");
}
if (E.Validation(expression) == false)
Console.WriteLine("input is not correct, please try again");
else
E.Processing(expression);
}
Console.ReadKey();
}
}
class Expression
{
public Dictionary<Char, String> Variables = new Dictionary<Char, String>();
public Expression()
{ }
public Boolean Validation(string expression)
{
// true if c is a letter or a decimal digit; otherwise, false && true if c is a decimal digit; otherwise, false.
if (!Char.IsLetterOrDigit(expression[0]) || Char.IsDigit(expression[0]))
return false;
else
return true;
}
public void Processing(String ValidExpression)
{
// Update Dictionary with new values per key
if (Variables.ContainsKey(ValidExpression[0]))
Variables.Remove(ValidExpression[0]);
string temp = " ";
if (ValidExpression.Length > 2 && !ValidExpression.Contains("Show") && !ValidExpression.Contains("exit"))
{
// removing the variable name and "=" from the string
for (int i = 2; i < ValidExpression.Length; i++)
temp = ValidExpression[i] + temp.Remove(i, 0);
Variables.Add(ValidExpression[0], LongProcessing(temp).ToString());
}
}
// something is wrong in this method
public int LongProcessing(String ValidExpression)
{
string temp;
int counter = 0;
string result = " ";
for (int i = 0; i < ValidExpression.Length; i++)
{
//changing variables (letters) with values
if (Char.IsLetter(ValidExpression[i]))
{
if (Variables.ContainsKey(ValidExpression[i]))
{
Variables.TryGetValue(ValidExpression[i], out temp);
for (int j = 0; j < temp.Length; j++)
{
result = temp[j] + result.Remove(counter, 0);
counter++;
}
}
}
else
{
result = ValidExpression[i] + result.Remove(counter, 0);
counter++;
}
}
// checks if all of the string elements are numbers
if (ValidExpression.All(char.IsDigit))
return Convert.ToInt32(ValidExpression);
else
{
return Convert.ToInt32(new DataTable().Compute(result, null));
}
}
public void Show(Char ValidExpression)
{
Console.WriteLine(Variables[ValidExpression]);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
利用制度全球化;
使用系统数据;
名称空间控制台EApp2
{
班级计划
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“欢迎使用该程序\n更正语法:”);
Console.WriteLine(“A=10\nB=15\nC=A+B\nD=13/4-2+A-C+B\n显示(D)”;
Console.WriteLine(\n输入您的输入:);
表达式E=新表达式();
字符串表达式=“开始”;
while(表达式!=“退出”)
{
expression=Console.ReadLine();
//用于显示命令
if(表达式.Contains(“Show”)==true)
试试{E.Show(表达式[5]);}
捕获(例外e)
{
Console.WriteLine(“输入不正确,无法显示任何内容。请重试”);
}
如果(如验证(表达式)=false)
Console.WriteLine(“输入不正确,请重试”);
其他的
E.加工(表达);
}
Console.ReadKey();
}
}
类表达式
{
公共字典变量=新字典();
公众表达()
{ }
公共布尔验证(字符串表达式)
{
//如果c是字母或十进制数字,则为true;否则,如果c是十进制数字,则为false&&true;否则为false。
if(!Char.isleterOrdigit(表达式[0])| | Char.IsDigit(表达式[0]))
返回false;
其他的
返回true;
}
公共作废处理(字符串有效性表示)
{
//使用每个键的新值更新字典
if(Variables.ContainsKey(ValidExpression[0]))
变量.Remove(ValidExpression[0]);
字符串temp=“”;
如果(ValidExpression.Length>2&&!ValidExpression.Contains(“显示”)&&!ValidExpression.Contains(“退出”))
{
//从字符串中删除变量名和“=”
for(int i=2;i
以下是一些建议:
首先查看“Processing”中的“temp”值。为了帮助调试,请添加“Console.WriteLine”语句
public void Processing(String ValidExpression)
{
// Update Dictionary with new values per key
if (Variables.ContainsKey(ValidExpression[0]))
Variables.Remove(ValidExpression[0]);
string temp = " ";
if (ValidExpression.Length > 2 && !ValidExpression.Contains("Show") && !ValidExpression.Contains("exit"))
{
// removing the variable name and "=" from the string
for (int i = 2; i < ValidExpression.Length; i++)
{
temp = ValidExpression[i] + temp.Remove(i, 0);
Console.WriteLine(" temp: " + temp); //added for debugging
}
Variables.Add(ValidExpression[0], LongProcessing(temp).ToString());
}
}
公共作废处理(字符串ValidExpression)
{
//使用每个键的新值更新字典
if(Variables.ContainsKey(ValidExpression[0]))
变量.Remove(ValidExpression[0]);
字符串temp=“”;
如果(ValidExpression.Length>2&&!ValidExpression.Contains(“Show”)&&!ValidExpression
for (int i = 2; i < ValidExpression.Length; i++)
temp = ValidExpression[i] + temp.Remove(i, 0);
Assume ValidExpression is "A=10"
Temp starts out as " "
First iteration, temp is "1 "
Second iteration, temp is "01 "