3marci - Sa 12.03.11 22:53
Titel: Leetspeak mit einem Button
Hi Leute,
hab mal ne Frage, da ich gerade an einem Algorithmus für eine "Leetspeak Verschlüsselung" sitze die möglichst sinnvoll sein soll (für die die Leetspeak nicht kennen -> Wikipedia).
Ja, ich weiß... Google gibt jede menge Treffer wenn man nach "csharp leetspeak" sucht aus.
Die machen das aber alles mit zwei Buttons, einen zum verschlüsseln und einen zum entschlüsseln und ich dachte mir das muss doch einfacher gehen.
Eine Leetspeak Verschlüsselung mit einem Button!? Meine Klasse sieht bisher so aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| private Dictionary<char, char> charDict = new Dictionary<char, char>();
public Leetspeak() { charDict.Add('a', '4'); charDict.Add('4', 'a');
charDict.Add('b', '8'); charDict.Add('8', 'b');
}
public string Convert(string sText) { StringBuilder sBuilder = new StringBuilder(sText); charDict.Keys.ToList().ForEach(key => sBuilder.Replace(key, charDict[key])); return sBuilder.ToString(); } |
Das ganze soll aus jedem "a" eine "4" und aus jeder 4 ein a machen.
Leider macht er aus jedem a eine 4 und nimmt dann wieder die 4 und macht daraus ein a, kurz gesagt: es bleibt ein a.
Gibt es eine Möglichkeit, dass wenn er ein Char ersetzt hat diesen Char nicht mehr ersetzt, sondern gleich mit dem nächsten Zeichen weiter macht?
3marci - So 13.03.11 19:39
thx, hat mir sehr weitergeholfen...
Ich habe das Problem so gelöst und es funktioniert wie gewollt *freu*:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| public string Convert(string sText) { byte[] textBytes = UnicodeEncoding.UTF8.GetBytes(sText); char[] textArray = UnicodeEncoding.UTF8.GetChars(textBytes); string newText;
for (int i = 0; i < textArray.Length; i++) { if (charDict.ContainsKey(textArray[i])) { charDict.TryGetValue(textArray[i], out textArray[i]); } }
newText = new string(textArray);
return newText; } |
Das ganze macht jetzt aus "leetspeak" -> "13375p34k" und mit dem selben Button aus "13375p34k" wieder "leetspeak".