0

リストにある場合、文字の位置を置き換えることができる関数を作成しました

コード:

   public string NoSimilarChar(string password)
        {
            var listOfSimilarCharacters = new Dictionary<string, string>();
                listOfSimilarCharacters.Add("l", "i");
                listOfSimilarCharacters.Add("1", "i");
                listOfSimilarCharacters.Add("O", "0");

            // Iterate through each character
            for (int i = 0; i < password.Length; i++)
            {
                var currentCharacter = password[i].ToString();

                // check if the current char exists in either the key or the value of the list of similar characters
                if (listOfSimilarCharacters.Keys.Contains(currentCharacter) || listOfSimilarCharacters.Values.Contains(currentCharacter)) 
                {
                    currentCharacter = currentCharacter.Remove(currentCharacter.Length - 1, 1) + ",";

                }

            }

             return password;
        }

今、文字が削除されたときに関数 NoSimilarChar をロードする方法を知りたい

私はこのようなことを考えました:

 if (listOfSimilarCharacters.Keys.Contains(currentCharacter) || listOfSimilarCharacters.Values.Contains(currentCharacter)) 
                {
                    currentCharacter = currentCharacter.Remove(currentCharacter.Length - 1, 1) + ",";
NoSimilarChar(password);
                }

しかし、彼はループにとどまるので、これは良くないと思います。

4

3 に答える 3

0

パスワードから一連の文字を削除したいようです。その場合は、を使用する必要はありませんDictionaryDictionaryある文字を別の文字に置き換えたい場合は、A の方が理にかなっています。さらに、ここで再帰を使用する必要はありません。必要なのは、削除したい文字の配列と、それらを削除するための単純なループだけだと思います。

public string NoSimilarChar(string password)
{
    string[] charsToRemove = new  string[] { "l", "i", "1", "0", "O" }
    foreach (string charToRemove in charsToRemove)
    {
        password = password.Replace(charToRemove, "");
    }
    return password;
}

参考: 文字の配列を文字列として定義しました。これは、文字を空の文字列に置き換える必要があり、空の文字がないためです。

于 2013-03-04T11:34:44.883 に答える
0

この簡単なものを試してください

 var charsThatCannotbeinUserPwd = new[] {'1', 'l', 'O', '0', 'i'};

        // Iterate through each character
        var builder = new StringBuilder();
        for (int i = 0; i < password.Length; i++)
        {
            var currentCharacter = password[i];

            if (!charsThatCannotbeinUserPwd.Any(x => x.Equals(currentCharacter)))
                builder.Append(currentCharacter);

        }

        return builder.ToString();
于 2013-03-04T11:24:28.950 に答える
0
 ///for replacing
 foreach (KeyValuePair<string, string> item in listOfSimilarCharacters)
 {
    password = password.Replace(item.Key, item.Value);
 }

 ///for removing
  foreach (KeyValuePair<string, string> item in listOfSimilarCharacters)
  {
    if (password.IndexOf(item.Key) >= 0)
         password = password.Remove(password.IndexOf(item.Key), 1);
  }
于 2013-03-04T11:18:52.387 に答える