创建一个命令提示符,然后控制一些字符串方法来做

本文关键字:控制 字符串 然后 方法 一个 命令提示符 创建 | 更新日期: 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来注册所有你想在解释器中可用的函数,然后调用命令控制来解释一个。

我给出了两个关于如何添加函数的例子,一个lambda语法和引用一个普通函数。此外,这些函数假设您已经解析了什么是命令,什么是参数,这在您的示例中已经完成了。
    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");
    }