2017-07-10 2 views
0

Désolé pour mon mauvais anglais. Donc, j'ai un code.C#: Remplacer des lettres aléatoires par des lettres d'une autre disposition de clavier

public Random rnd = new Random(); 

    public string RandomizeLetters(string text) 
    { 
     string variations = ""; 

     foreach (var letter in text) 
     { 
      var а = new List<string> { "а", "аa" }; 
      var е = new List<string> { "е", "еe" }; 
      var о = new List<string> { "о", "оo" }; 
      var р = new List<string> { "р", "рp" }; 
      var с = new List<string> { "с", "сc" }; 
      var у = new List<string> { "у", "уy" }; 
      var х = new List<string> { "х", "хx" }; 

      var alphavite = new List<List<string>> { а, е, о, р, с, у, х }; 

      var res = new StringBuilder(); 

      foreach (var x in alphavite) 
      { 
       if (x.Exists(e => e.EndsWith(letter.ToString()))) 
       { 
        res.Append(x[1][rnd.Next(0, x[1].Length)]); 
       } 
      } 

      res.Append(letter.ToString()); 

      variations += res; 
     } 

     return variations.ToString(); 
    } 

Ce code remplace les lettres aléatoires avec des lettres qui sont visuellement similaires aux lettres d'un clavier différent, dans mon cas, de la disposition du clavier russe à la disposition du clavier anglais. Mais au lieu du résultat souhaité, je reçois du texte avec des caractères en double.

Voici le texte que je veux traiter:

Для проверки наличия в вашем тексте символов из другого языка - скопируйте исходный текст, вставьте его в поле ниже, и выберите нужный чекбокс языка

Mais le texte que je reçois à la sortie:

Для пpроовeеpрки нaаличия в ваашeем теекcстeе cсимвоолоов из дрруугоогоо языкaа - сскоопиpрууйтее иcсxхoодный теекcст, всстaавьтее eегoо в поолeе нижее, и выбeеpритeе нyужный чеекбоокcс языкаа

Comment résoudre ce problème? Je vérifie le texte avec l'aide du service de vérification des caractères: raskladka.obmen-service.com

+0

'var а = nouvelle liste { "а", "аa"}; 'wtf? Qu'est-ce que vous essayez même de faire avec ce code, je ne peux pas le dire sérieusement. – EpicKip

+0

@EpicKip lettre "a" de la disposition du clavier anglais, mais lettre "A" de la disposition du clavier russe. Ce sont des lettres différentes. Et je veux remplacer les caractères russes par des caractères anglais dans le texte. – Behavior

+0

@SergeyBerezovskiy res.Append (x [1] [rnd.Next (0, x [1] .Length)]) Ce code sélectionne un caractère aléatoire parmi deux possibles – Behavior

Répondre

0

Même si vous remplacez lettre res.Append(x[1][rnd.Next(0, x[1].Length)]); plus tard, vous ajoutez encore lettre de base: res.Append(letter.ToString()); Essayez d'ajouter une condition:

 bool replaced = false; 
     foreach (var x in alphavite) 
     { 
      if (x.Exists(e => e.EndsWith(letter.ToString()))) 
      { 
       res.Append(x[1][rnd.Next(0, x[1].Length)]); 
       replaced = true; 
      } 
     } 
     if(!replaced) 
      res.Append(letter.ToString()); 
+0

Merci, ça marche: D – Behavior

0

Peut-être que vous devez remplacer la lettre anglaise avec son équivalent cyrillique similaires issus du jeu de caractères Unicode, tels que:

var а = new List<string> { 'а', '\u0430' }; 
    var а = new List<string> { 'p', '\u0440' }; 
    var а = new List<string> { 'y', '\u0443' };