Как указано в заголовке, я пытаюсь заменить буквы в определенной строке с самой высокой частотой соответствующей буквой в алфавите.Попытка заменить буквы в строке соответствующей буквой в алфавите с аналогичной частотой
Например, если строка имеет наибольшее D
с в нем, то я бы заменить все D
S с E
, как это самое обычное письмо в алфавите, я бы тогда продолжать этот процесс идет вниз буквенные частоты ...
Итак, у меня был снимок, но мой результат совершенно неправильный.
Im совершенно новый для progroqamming, поэтому мне жаль, если все это отвратительно, но id все равно нравится делать это в формате, который я уже наблюдал.
Я связал свой код следующим образом, я сделал это несколькими способами, я задавался вопросом, может ли кто-нибудь обнаружить проблему, которую я испытываю.
Я считаю, что это замена неправильного письма, но я действительно понятия не имею, я только сделал простой шифр ceasar раньше, так что это не большой шаг, но я действительно не могу оглянуться, что происходит не так.
Ох и пожалуйста игнорируют имена переменных и т.д. они просто заполнителей:
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;
}
}
Это где я считаю, что проблемы лежат, но я не могу понять, почему, снова я знаю, что это беспорядочно, но любая помощь очень ценится.
В чем проблема? Можете ли вы дать ввод, ожидаемый результат и фактический результат, который является неправильным? –
Я не уверен, что вы пытаетесь установить положение в точке в большинстве или в позиции в буквах, где Макс был найден. Если вы пытаетесь установить posiiton на количество букв, вам нужно использовать 'position = letterAmounts.ToList(). IndexOf (most);' – bilpor
@YacoubMassad да, у меня может быть вход, но результат неправильный, думаю, что у меня есть это теперь, хотя спасибо = D –