我正试图解决一个问题并需要一个解决方案(好的 - 我可能会得到负面的代表)但是这里有:
我们假设我有以下内容:
Actual: A B D E F G H I J K L M N O P Q R S T U V W X Z
Change: X F S M E P U T V L Q H K I J W A D O R Z B G N
基本上,我想用“更改”列表中的相应字符替换“实际”列表中包含的字符串中的所有字符。如果某些字符不在“实际”列表中,则必须保持不变。
我试图这样做,但是,它不起作用:
foreach (var c in charList) {
if (input.Contains (c.Key)) {
foreach (var a in charList) {
decrypted[i] = a.Key;
}
i++;
}
}
我基本上只是得到“N”值..任何想法?谢谢
答案 0 :(得分:4)
我的即兴创作:
1.首先创建一个字典
List<char> Actual = "A B D E F G H I J K L M N O P Q R S T U V W X Z".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s[0]).ToList();
List<char> Change = "X F S M E P U T V L Q H K I J W A D O R Z B G N".Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s[0]).ToList();
Dictionary<char, char> ReplacemetRules = Actual.ToDictionary(s => s, s => Change[Actual.IndexOf(s)]);
或只是
Dictionary<char, char> ReplacemetRules = new Dictionary<char, char>
{
{'T','F'},
{'E','A'},
{'S','Q'}
};
2.我们有一个输入字符串:
string input = "TEST";
然后使用:
string output = string.Concat(input.Select(c => ReplacemetRules.ContainsKey(c) ? ReplacemetRules[c] : c)));
答案 1 :(得分:1)
检查出来:
string InputString = "TEST";
string EncryptedString = string.Empty;
string IfContains = "ABDEFGHIJKLMNOPQRSTUVWXZ";
string ReplaceWith = "XFSMEPUTVLQHKIJWADORZBGN";
foreach (char InputChar in InputString)
{
int IndexToReplace = IfContains.IndexOf(InputChar);
if (IndexToReplace >= 0)
{
EncryptedString = string.Concat(EncryptedString, ReplaceWith[IndexToReplace]);
}
}
更新:您应该注意案例。执行不区分大小写的搜索会更好。
答案 2 :(得分:0)
foreach (var c in charList) {
if (input.Contains (c.Key)) {
foreach (var a in charList) {
decrypted[i] = a.Key;
}
i++;
}
}