创建一个命令提示符,然后控制一些字符串方法来做
本文关键字:控制 字符串 然后 方法 一个 命令提示符 创建 | 更新日期: 2023-09-27 18:06:03
我想让我的程序像一个命令提示符。我认为它必须执行一些字符串方法。
例如:COM> length "string "
必须返回"string "的长度(命令必须大于3个字符,即len "asdf"可以)。除此之外,我还增加了三个方法,"reverse","ToUpper"answers"ToLower"以及"to escape","quit",并且它不一定是相邻的(可以是命令和字符串之间的任何空格)。
我写在我的路上,但我认为它没有优化。那么你有什么技巧可以让它更快、更可重复使用吗?
(我不关心任何异常,所以我知道有一些异常)
class Program
{
static void Main(string[] args)
{
string str;
for (; ; )
{
Console.Write("CSD>");
str = Console.ReadLine();
if (str == "quit")
break;
commandControl(str);
}
}
public static void commandControl(string str)
{
string strCom, strString;
int index;
str = str.Trim();
index = str.IndexOf(" ");
strCom = str.Substring(0, index);
str = str.Substring(index);
str = str.Trim();
strString = str.Substring(1, str.Length - 2);
string[] strComArry = { "length", "reverse", "upper", "lower" };
int i;
if (strCom.Length >= 3)
{
for (i = 0; i < strComArry.Length; i++)
if (strCom.Length <= strComArry[i].Length)
if (strCom == strComArry[i].Substring(0, strCom.Length))
break;
switch (i)
{
case 0:
Console.WriteLine(strString.Length);
break;
case 1:
for (int j = strString.Length - 1; j >= 0; --j)
System.Console.Write(strString[j]);
Console.WriteLine();
break;
case 2:
Console.WriteLine(strString.ToUpper());
break;
case 3:
Console.WriteLine(strString.ToLower());
break;
}
}
else
Console.WriteLine("Command must be more than 3 characters !...");
}
}
我不打算提供一个完整的工作示例,但是看看下面的代码片段。这个想法是使用操作字典来存储如何处理命令。这样,你就可以通过添加"Methods"字典来为解释器添加新功能。
这个想法是调用InitializeFunctions
来注册所有你想在解释器中可用的函数,然后调用命令控制来解释一个。
static Dictionary<string, Action<string>> Methods = new Dictionary<string, Action<string>>();
public static void InitializeFunctions()
{
Methods.Add("ToLower", a => Console.WriteLine(a.ToLower()));
Methods.Add("ToUpper", ToUpper);
}
static void ToUpper(string str)
{
Console.WriteLine(str.ToUpper());
}
public static void commandControl(string str, string param)
{
if(str.Length < 4)
Console.WriteLine("Command must be more than 3 characters !...");
if (Methods.ContainsKey(str))
Methods[str].Invoke(param);
else
Console.WriteLine("Invalid Command");
}