2013-03-04 5 views
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); 
       } 

, но я думаю, что это не хорошо, потому что он остается в цикле.

+0

Вы хотите удалить эти символы из текста пароля, которые находятся в ваших 'listOfSimilarCharacters' ?? –

+1

Почему бы просто не перебирать «список» символов и использовать 'String.Remove'? – juharr

ответ

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); 
    } 
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(); 
0

Похоже, что вы хотите удалить набор символов от вас пароль. Если это так, вам не нужно использовать Dictionary. A Dictionary имеет смысл, если вы хотите заменить один символ другим. Кроме того, здесь не нужно использовать рекурсию. Я считаю, что все, что вам нужно, это массив символов, которые вы хотите удалить, и простой цикл для их удаления.

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; 
} 

FYI: Я определил массив символов как строки, потому что вы хотите заменить символ с пустой строкой и не пустой символ.

Смежные вопросы