【发布时间】:2015-12-14 15:34:20
【问题描述】:
正如标题所述,我正在尝试用字母表中的相应字母替换特定字符串中频率最高的字母。
例如,如果字符串中的Ds 最多,那么我会将所有Ds 替换为E,因为这是字母表中最常见的字母,然后我将继续此过程降低字母频率...
所以我有一个镜头,但我的输出完全错误。
我对 progroqamming 完全陌生,如果这一切让你感到厌恶,我很抱歉,但我仍然喜欢以我已经遵循的格式来做。
我已将我的代码链接如下,我已经用几种不同的方法完成了它,我想知道是否有人能发现我遇到的问题。
我相信它正在替换错误的字母,但我真的不知道,我之前只做过一个简单的凯撒密码,所以这不是一个很大的步骤,但我真的无法弄清楚出了什么问题。
哦,请忽略变量名等它们只是占位符:
public class Decode
{
public static void doDecode()
{
string decoding = File.ReadAllText(@"thing.txt", Encoding.Default);
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int counter = 0;
int amount = 0;
int[] letterAmounts = new int[26];
decoding = decoding.Replace(Environment.NewLine, "");
decoding = decoding.Replace(" ", "");
foreach (char k in alphabet)
{
amount = Advanced.Adv(decoding, k);
letterAmounts[counter] = amount;
counter++;
}
File.WriteAllText(@"stuff.txt", Change.doChange(decoding, letterAmounts));
System.Diagnostics.Process.Start(@"stuff.txt");
}
}
所以这只是调用其他类并将找到的数字分配给一个数组
public class Advanced
{
public static int Adv(string test, char c)
{
int count = 0;
foreach (char x in test)
{
if (x == c)
{
count = count + 1;
}
}
return count;
}
}
这是以前调用的,只是计算一个字母的数量
public class Change
{
public static string doChange(string test, int[] letterAmounts)
{
string frequency = "ETAOINSHRDLCUMWFGYPBVKJXQZ";
char[] mostFrequent = frequency.ToCharArray();
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] abc = alphabet.ToCharArray();
int most = 0;
int position = 0;
for (int tester = 0; tester < 26; tester++)
{
most = letterAmounts.Max();
position = Array.IndexOf(letterAmounts, most);
test = test.Replace(abc[position], mostFrequent[tester]);
letterAmounts[position] = 0;
}
return test;
}
}
这是我认为问题所在,但我无法理解为什么,我再次知道它的混乱,但任何帮助都深表感谢。
【问题讨论】:
-
有什么问题?你能给出错误的输入、预期输出和实际输出吗?
-
我不确定您是否尝试将位置设置为发现 Max 的点 in most 或 letterAmounts 的位置。如果您尝试将位置设置为字母数量,那么您需要使用
position = letterAmounts.ToList().IndexOf(most); -
@YacoubMassad 是的,我可以输入但输出错误,我想我现在有了,但谢谢=D
-
@bilpor 是的,我明白你在说什么,但认为 sr28 已经为我解决了,再次感谢你 =D
标签: c# arrays string frequency-analysis alphabet