patterncsharpMinor
Cipher decryption and encryption
Viewed 0 times
andencryptiondecryptioncipher
Problem
I'm brand new to C# and I've started to make a cipher decryption program. The code works and runs fine, apart from the odd exception. I'm just looking for ways to improve my code and make more efficient.
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Application
{
class Caesar
{
static void Main(string[] args)
{
try{
Console.WriteLine("Enter Key:");
int k = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Press E for Encrypting and D for Decrypting:");
string choice =Convert.ToString(Console.ReadLine()).ToUpper();
switch (choice)
{
case "E": Console.Write("Enter Plain Text:");
string pt = Console.ReadLine();
caesar_cipher(k, pt);
break;
case "D": Console.Write("Enter Cipher :");
string ct = Console.ReadLine();
caesar_decipher(k, ct);
break;
default: Console.WriteLine("You've entered an incorrect option!");
break;
}
}
catch(Exception)
{
Console.WriteLine ("The value you entered is incorrect");
Console.WriteLine ("Press any key to try again");
}
}
static void caesar_cipher(int key, string pt)
{
int size = pt.Length;
char[] value = new char[size];
char[] cipher = new char[size];
for (int r = 0; r < size; r++)
{
value[r] = Convert.ToChar(pt.Substring(r, 1));
}
for (int re = 0; re < size; re++)
{
int count = 0;
int a = Convert.ToInt32(value[re]);
for (int y = 1; y <= key; y++)
{
if (count == 0)
{
if (a == 90)
{ a = 64; }
else if (a == 122)
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Application
{
class Caesar
{
static void Main(string[] args)
{
try{
Console.WriteLine("Enter Key:");
int k = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Press E for Encrypting and D for Decrypting:");
string choice =Convert.ToString(Console.ReadLine()).ToUpper();
switch (choice)
{
case "E": Console.Write("Enter Plain Text:");
string pt = Console.ReadLine();
caesar_cipher(k, pt);
break;
case "D": Console.Write("Enter Cipher :");
string ct = Console.ReadLine();
caesar_decipher(k, ct);
break;
default: Console.WriteLine("You've entered an incorrect option!");
break;
}
}
catch(Exception)
{
Console.WriteLine ("The value you entered is incorrect");
Console.WriteLine ("Press any key to try again");
}
}
static void caesar_cipher(int key, string pt)
{
int size = pt.Length;
char[] value = new char[size];
char[] cipher = new char[size];
for (int r = 0; r < size; r++)
{
value[r] = Convert.ToChar(pt.Substring(r, 1));
}
for (int re = 0; re < size; re++)
{
int count = 0;
int a = Convert.ToInt32(value[re]);
for (int y = 1; y <= key; y++)
{
if (count == 0)
{
if (a == 90)
{ a = 64; }
else if (a == 122)
Solution
Code bloat
A simple task is simple. Almost 150 lines of code are not justified for such an easy task. You imported Linq so you arguably know about it, actually using it may do very good to your code.
A general, pseudo-code view of the
And you are done.
And
A simple task is simple. Almost 150 lines of code are not justified for such an easy task. You imported Linq so you arguably know about it, actually using it may do very good to your code.
A general, pseudo-code view of the
caesarCipher function may be:public static string caesarEncrypt(string text, int key) {
return text.Map( x -> alphabet.include?(x) ? shiftChar(x, key) : x );
}shiftChar may be written as:return alphabet [ alphabet.index(char) % alphabet.length ]And you are done.
And
caesarDecrypt is just caesarEncrypt with key = 26 - key, there is no need to write the whole thing again.Code Snippets
public static string caesarEncrypt(string text, int key) {
return text.Map( x -> alphabet.include?(x) ? shiftChar(x, key) : x );
}return alphabet [ alphabet.index(char) % alphabet.length ]Context
StackExchange Code Review Q#110000, answer score: 5
Revisions (0)
No revisions yet.