-2

我正在开发一个系统,该系统为用户生成密码、拨打电话并一次说出一个字符的密码。例如,让密码为“BlaBla123”

现在我有了这个基本词:

“Capitol”、“Small”和“as in”

另外,我有这张桌子:

//  Letter | Word     | Code    |
// --------+----------+---------|
//  a      | Alpha    |  97, 65 |
//  b      | Bravo    |  98, 66 |
//  c      | Charlie  |  99, 67 |
//  d      | Delta    | 100, 68 |
//  e      | Echo     | 101, 69 |
//  f      | Foxtrot  | 102, 70 |
//  g      | Golf     | 103, 71 |
//  h      | Hotel    | 104, 72 |
//  i      | India    | 105, 73 |
//  j      | Juliet   | 106, 74 |
//  k      | Kilo     | 107, 75 |
//  l      | Lima     | 108, 76 |
//  m      | Mike     | 109, 77 |
//  n      | November | 110, 78 |
//  o      | Oscar    | 111, 79 |
//  p      | Papa     | 112, 80 |
//  q      | Quebec   | 113, 81 |
//  r      | Romeo    | 114, 82 |
//  s      | Sierra   | 115, 83 |
//  t      | Tango    | 116, 84 |
//  u      | Uniform  | 117, 85 |
//  v      | Victor   | 118, 86 |
//  w      | Whiskey  | 119, 87 |
//  x      | X-ray    | 120, 88 |
//  y      | Yankee   | 121, 89 |
//  z      | Zulu     | 122, 90 |
//  1      | One      | 49      |
//  2      | Two      | 50      |
//  3      | Three    | 51      |
//  4      | Four     | 52      |
//  5      | Five     | 53      |
//  6      | Six      | 54      |
//  7      | Seven    | 55      |
//  8      | Eight    | 56      |
//  9      | Nine     | 57      |
//  0      | Zero     | 48      |

现在,我试图造一个像这样的句子:

“Bravo 中的 Capitol B” “Lima 中的小 L” “Alpha 中的小 A” “Bravo 中的 Capitol B” “Lima 中的小 L” “Alpha 中的小 A” “一” “二” “三"

反对假定的密码。

任何人都可以分享一下我如何将表格存储在内存中并且只为 ForEach 一个密码字符串并为每个遇到的字符获取一个句子的想法吗?

谢谢。

4

2 回答 2

1

像这样的东西:

填写字典characterLookup.Add('a', "Alpha"),注意代码示例中的“ToLower”,只存储小写字母。

键值存储(字典)是首选的数据结构,因为我们正在通过键(在本例中为字母)进行查找。

    private Dictionary<char, string> characterLookup = new Dictionary<char, string>();

    public string[] GetSentences(string password)
    {
        string[] sentences = new string[password.Length];

        for (int i = 0; i < password.Length; i++)
        {
            char currentChar = password[i];

            if (char.IsLetter(currentChar))
            {
                sentences[i] = string.Format("{0} {1} as in {2}",
                    char.IsLower(currentChar) ? "Lower" : "Upper",
                    currentChar.ToUpper(),
                    characterLookup[currentChar.ToLower()]);
            }
            else if (char.IsDigit(currentChar))
            { 
                sentences[i] = characterLookup[currentChar];
            }

        }
        return sentences;
    }
于 2012-08-13T09:15:16.803 回答
0

一种方法是创建包含字母、单词和代码的类,例如:

public class MyClass
{
    public char Letter { get; set; }
    public string Word { get; set; }
    public string Code { get; set; }
}

然后你可以定义 aHashSet<MyClass>来包含类似这样的字母:

HashSet<MyClass> letters = new HashSet<MyClass>();
letters.Add(new MyClass { Letter = 'a', Word = "alpha", Code = "123,23" });
letters.Add(new MyClass { Letter = 'b', Word = "bravo", Code = "123,23" });
letters.Add(new MyClass { Letter = 'c', Word = "charlie", Code = "123,23" });
letters.Add(new MyClass { Letter = 'd', Word = "delta", Code = "123,23" });
//.......................

然后你可以StringBuilder用来构建你的字符串。

string password = "acd";
StringBuilder sb = new StringBuilder();
foreach (var val in password)
{
    if (char.IsUpper(val))
        sb.Append("Capital " + val + " as in " + Letters.Where(r => r.Letter == val).FirstOrDefault().Word + Environment.NewLine);
    else
        sb.Append("Small " + val + " as in " + Letters.Where(r => r.Letter == val).FirstOrDefault().Word + Environment.NewLine);
}

string test = sb.ToString();
于 2012-08-13T09:22:27.753 回答