C# :: Aufgabe #33
9 Lösungen
Mit Caesar Chiffre ent- und verschlüsseln
Anfänger - C#
von Dome
- 03.01.2013 um 01:30 Uhr
Schreiben Sie ein Programm, indem Sie mit Hilfe der Caesar Chiffre einen beliebigen Text ent- und verschlüsseln können. Zuvor muss der Text und die Anzahl der Verschiebung angegeben werden. Groß- und Kleinschreibung muss nicht beachtet werden.
Konsolenausgabe:
Geben Sie den Text ein: Beispielwort
Um wie viele Stellen soll verschoben werden: 1
Ergebnis: Cfjtqjfmxpsu
Lösungen:
void main()
{
Console.Write("Geben Sie den Text ein: ");
string inputText = Console.ReadLine();
Console.Write("Um wie viele Stellen soll verschoben werden: ");
string inputStellen = Console.ReadLine();
int stellen = int.Parse(inputStellen) % 26;
string output = Chiffre(inputText, stellen);
Console.WriteLine("Ergebnis: {0}", output);
}
private static string Chiffre(string input, int stellen)
{
string output = string.Empty;
foreach (char c in input)
{
char x = (char)(c+stellen);
output += x.ToString();
}
return output;
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Caesar {
class Program {
static void Main(string[] args) {
Console.Write("Geben Sie den Text ein: ");
string klartext = Console.ReadLine().ToLower();
Console.Write("Um wie viele Stellen soll verschoben werden: ");
int nummer = Convert.ToInt32(Console.ReadLine());
string chiffre = "";
for(int i = 0; i < klartext.Length; i++)
{
char c = Convert.ToChar(klartext[i] + nummer);
if (c > 'z') {
c = (char)(c - 26);
} else if (c < 'a') {
c = (char)(c + 26);
}
chiffre += c;
}
Console.Write("Ergebnis: " + chiffre);
}
}
}
using System;
namespace CaesarVerschluesselung
{
class Program
{
static void Main(string[] args)
{
string text = "";
short stellen = 0;
byte buchstabe = 0;
string ergebnis = "";
Console.Write("Geben Sie den Text ein: ");
text = Console.ReadLine();
Console.Write("Um wie viele Stellen soll verschoben werden?\n(positiv = verschlüsseln, negativ = entschlüsseln)");
do
{
Console.Write("Stellen angeben: ");
}
while (!short.TryParse(Console.ReadLine(), out stellen));
if (stellen < 0)
stellen += 26;
while (stellen < 0)
stellen += 25;
while (stellen > 25)
stellen -= 25;
foreach (Char i in text)
{
buchstabe = (byte) i;
if(65 <= buchstabe && buchstabe <= 90)
for (int j = 0; j < stellen; j++)
{
if (buchstabe == 90)
buchstabe = 64;
buchstabe++;
}
if(97 <= buchstabe && buchstabe <= 122)
for (int j = 0; j < stellen; j++)
{
if (buchstabe == 122)
buchstabe = 96;
buchstabe++;
}
ergebnis += (char) buchstabe;
}
Console.WriteLine("Ergebnis: {0}", ergebnis);
}
}
}
Ich hab tatsächlich richtig lange überlegen müssen, wie ich einen einzelnen char in der ASCII-Tabelle verschieben kann ... :D
C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CaesarChiffre
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Geben Sie ihren Text ein: ");
string eingabe = Console.ReadLine();
Console.WriteLine("Um wieviel Stellen soll verschoben werden?");
int number;
bool valid = false;
do
{
valid = int.TryParse(Console.ReadLine(), out number);
} while (valid != true);
StringBuilder strBuilder = new StringBuilder(eingabe);
int letterAscii;
for (int i = 0; i < eingabe.Length; i++)
{
letterAscii = strBuilder[i];
letterAscii += number;
strBuilder[i] = (char)letterAscii;
}
string ausgabe = strBuilder.ToString();
Console.WriteLine("Die Ausgabe: {0}", ausgabe);
Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CaesarChiffre
{
class Program
{
static void Main(string[] args)
{
string eingabeText, erg = "";
char[] text;
int stellenVerschieben;
Console.Write("Geben Sie den Text ein: ");
eingabeText = Console.ReadLine();
text = new char[eingabeText.Length];
text = eingabeText.ToCharArray();
Console.Write("Um wie viele Stellen soll verschoben werden: ");
stellenVerschieben = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < eingabeText.Length; i++)
{
if ((stellenVerschieben / 26) != 0)
while ((stellenVerschieben / 26) != 0)
stellenVerschieben -= 26;
if (Convert.ToInt32(text[i]) >= 65 && Convert.ToInt32(text[i]) <= 90)
if ((Convert.ToInt32(text[i]) + stellenVerschieben) > 90)
erg += Convert.ToString(Convert.ToChar(64 + ((Convert.ToInt32(text[i]) + stellenVerschieben) - 90))); // 96+..., da a = 97 -> wird ansonsten übersprungen
else
erg += Convert.ToString(Convert.ToChar(Convert.ToInt32(text[i]) + stellenVerschieben));
else if ((Convert.ToInt32(text[i]) + stellenVerschieben) > 122)
erg += Convert.ToString(Convert.ToChar(96 + ((Convert.ToInt32(text[i]) + stellenVerschieben) - 122))); // 96+..., da a = 97 -> wird ansonsten übersprungen
else
erg += Convert.ToString(Convert.ToChar(Convert.ToInt32(text[i]) + stellenVerschieben));
}
Console.Write("Ergebnis: " + erg);
Console.Read();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TrainYourProgrammer33
{
class Program
{
static void Main(string[] args)
{
string neuerText = "";
int ascii;
Console.Write("Geben Sie den Text ein: ");
string text = Console.ReadLine();
Console.Write("Um wie viele Stellen soll verschoben werden: ");
int verschieben = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i <= text.Length - 1; i++)
{
ascii = Convert.ToInt32(text[i] + verschieben);
if (ascii > 64 && ascii < 91 || ascii > 96 && ascii < 123 )
{
neuerText += Convert.ToChar(ascii);
}
else
{
ascii = ascii - 26;
neuerText += Convert.ToChar(ascii);
}
}
Console.WriteLine(neuerText);
Console.ReadKey();
}
}
}
static void Aufgabe_33()
{
string eingabe, ausgabe = "";
int k, verschieben, _verschieben;
char buchstabe;
Console.Write("Geben Sie den Text ein: ");
eingabe = Console.ReadLine();
Console.Write("Um wie viele Stellen soll verschoben werden: ");
verschieben = Convert.ToInt16(Console.ReadLine());
_verschieben = verschieben;
for (int i = 0; i <= eingabe.Length - 1; i++)
{
k = (int)eingabe[i];
verschieben = _verschieben;
if (k >= 65 && k <= 90)
{
if (k + verschieben > 90) // funktioniert bei negativem verschieben nicht!!
{
verschieben -= (90 - k);
k = 64 + verschieben;
buchstabe = (char)k;
ausgabe += buchstabe;
}
else
{
k += verschieben;
buchstabe = (char)k;
ausgabe += buchstabe;
}
}
else if (k >= 97 && k <= 122)
{
if (k + verschieben > 122) // funktioniert bei negativem verschieben nicht!!
{
verschieben -= (122 - k);
k = 96 + verschieben;
buchstabe = (char)k;
ausgabe += buchstabe;
}
else
{
k += verschieben;
buchstabe = (char)k;
ausgabe += buchstabe;
}
}
}
Console.WriteLine("Ergebnis: {0}", ausgabe);
}
NET Core 3.x; C# 8.x
C#-Code
using System;
using System.Linq;
namespace CS_Aufgabe_33_Caesar
{
class Program
{
static void Main(string[] args)
{
var lstChar = Enumerable.Range('A', 26).Select(x => (char)x).ToList();
char GetChar(char c, int v) => lstChar.Contains(c) ? lstChar[(lstChar.IndexOf(c) + v) % 26] : c;
var arr = "Hslh qhjah lza".ToUpper().ToCharArray();
Enumerable.Range(0, 25).Select(y => string.Join("", arr.Select(x => GetChar(x, y)).ToList())).ToList().ForEach(Console.WriteLine);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Caesarverschluesselung
{
class Program
{
static void Main(string[] args)
{
Console.Write("Please write your Text: ");
string userText = Console.ReadLine();
int userNumber = TryGetInt32("how many digits should the text move?: ");
Console.WriteLine("\n Here is your encrypted Text: " + CaesarChiffre(userText, userNumber));
Console.ReadKey();
}
public static int TryGetInt32(string userInput)
{
Console.Write(userInput);
int counter = 1;
while (counter <= 7)
{
try
{
return Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
counter++;
}
}
throw new Exception();
}
private static string CaesarChiffre(string userText, int userNumber)
{
string output = string.Empty;
foreach(char abc in userText)
{
char x = (char)(abc + userNumber);
output += x.ToString();
}
return output;
}
}
}