首页 > 解决方案 > c#字符串索引每2个元素

问题描述

我正在尝试制作一个小型解密器,但是有没有一种方法可以对数字上的字符串进行 for 循环,例如“1512120508”,通过 i 索引 2 个字符而不是 0 然后 1 然后 2 等等。例如第一个循环检查索引0 和 1 ("15") 然后下一个循环检查 2 和 3 ("12") 等等。谢谢你。

public string decode(string text)
        {
            string newText = "";
            string transposed = "";

            var encryption = new Dictionary<string, string>(){
                {"a","01"},{"b","02"},{"c","03"},{"d","04"},{"e","05"},
                {"f","06"},{"g","07"},{"h","08"},{"i","09"},{"j","10"},
                {"k","11"},{"l","12"},{"m","13"},{"n","14"},{"o","15"},
                {"p","16"},{"q","17"},{"r","18"},{"s","19"},{"t","20"},
                {"u","21"},{"v","22"},{"w","23"},{"x","24"},{"y","25"},
                {"z","26"}
            };

            for(int i = ; i < text.Length; i)
            {
                if(encryption.ContainsValue(Convert.ToString(text[i])))
                {
                    // finds key from value
                    var myKey = encryption.FirstOrDefault(x => x.Value == Convert.ToString(text[i])).Key;
                    transposed += myKey;
                }
            }

标签: c#loopsclassoop

解决方案


是的,您可以+=2在 for 循环中使用String.Substring. 但我会使用 aStringBuilder并且不使用ContainsValue+ 字典上的另一个循环,但只有一个:

public static string decode(string text, int length = 2)
{
    StringBuilder transposeBuilder = new StringBuilder();

    var encryption = new Dictionary<string, string>(){
                {"a","01"},{"b","02"},{"c","03"},{"d","04"},{"e","05"},
                {"f","06"},{"g","07"},{"h","08"},{"i","09"},{"j","10"},
                {"k","11"},{"l","12"},{"m","13"},{"n","14"},{"o","15"},
                {"p","16"},{"q","17"},{"r","18"},{"s","19"},{"t","20"},
                {"u","21"},{"v","22"},{"w","23"},{"x","24"},{"y","25"},
                {"z","26"}
            };

    for (int i = 0; i < text.Length; i += length)
    {
        string token = text.Length >= i + length ? text.Substring(i, length) : text.Substring(i);
        var keyValue = encryption.FirstOrDefault(kv => kv.Value == token);
        if(!keyValue.Equals(default(KeyValuePair<string, string>)))
        {
            transposeBuilder.Append(keyValue.Key); 
        }
    }
    
    return transposeBuilder.ToString();
}

您应该考虑将值存储在键中,并将键存储在值中,以受益于字典的快速查找性能。然后你可以使用这个代码:

for (int i = 0; i < text.Length; i += length)
{
    string token = text.Length >= i + length ? text.Substring(i, length) : text.Substring(i);
    if(encryption.TryGetValue(token, out string value))
    {
        transposeBuilder.Append(value); 
    }
}

推荐阅读