2.8k Aufrufe
Gefragt in Anwendungen(Java,C++...) von cyberrob Mitglied (737 Punkte)
Guten Abend,

ich habe ein kleines Problem.
Vielleicht ist es sogar ein klein wenig größer ;)

Ich möchte das Caesar-Chiffre in C# implementieren.
Hierfür habe ich eine TextBox1, welche einen String bekommt.

Dann die Buttons Decode und Encode.
Desweiteren noch TextBox2, welche den Decodierten, oder (falls vorher codiert eingegeben) den encodierten Text ausgeben soll.

Codeschnipsel zum Caesar Chiffre finde ich im Internet zuhauf, jedoch keine Möglichkeit, diese so einzubinden, dass sie wirklich nur per Druck auf den Button ausgeführt werden.

Vielleicht weiß hier jemand Rat?

Ist just for fun und ich studiere Informatik im 2. Semester.
Bitte also keine Ratschläge wie: Fang erstmal mit Grundlegendem an...
Denn das problem ist momentan größtenteils die Programmiersprache, nicht das generelle Verständnis. Wüsste halt gerne, wie sich das lösen lässt.

Gruß,
Cyberrob

6 Antworten

0 Punkte
Beantwortet von cyberrob Mitglied (737 Punkte)
Wer sichs nicht bildlich vorstellen kann, ich versuche in etwa das hier, nur die Ausgabe eben in ein zweites Textfeld:
www.youtube.com/watch?v=DmjOWptrUX4&feature=plcp&context=C302f7fbUDOEgsToPDskLQ3q6HKzMGJC8KUkfsNhF6
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
an einer stelle kommt doch sicher beim entschlüsseln und verschlüsseln Textbox1.TEXT = ...

da änderst du beim verschlüsseln einfach in Textbox2.TEXT = ... um
0 Punkte
Beantwortet von cyberrob Mitglied (737 Punkte)
Nun, öhm, der Teil ist mir klar ;)
Dann war die Frage doch zu ungenau, tschuldigung.

Ich hab bisher nur die Formen und Buttons, wie oben genannt und einen String. Darüber hinaus weiß ich, wie dasCeasar Chiffre funktioniert.
Aper per String ersetzen kann ich ja nur einen Buchstaben ersetzen, nicht mehrere simultan. Also muss ichs mit einem Zähler oder so realisieren.

Dafür habe ich dann gegoogelt und folgendes Programm zum Caesar-Chiffre gefunden:

"class Program
{
/// <summary>
/// Apply Caesar cipher with shift.
/// </summary>
static string Caesar(string value, int shift)
{
char[] buffer = value.ToCharArray();
for (int i = 0; i < buffer.Length; i++)
{
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + shift);
// Subtract 26 on overflow.
// Add 26 on underflow.
if (letter > 'z')
{
letter = (char)(letter - 26);
}
else if (letter < 'a')
{
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
}
return new string(buffer);
}

static void Main()
{
string a = "test";
string b = Caesar(a, 18); // Ok
string c = Caesar(b, -18); // Ok

string d = Caesar(a, 1); // Ok
string e = Caesar(d, -1); // Ok

string f = "exxegoexsrgi";
string g = Caesar(f, -4); // Ok

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
Console.WriteLine(e);
Console.WriteLine(f);
Console.WriteLine(g);
}"

Leider schaffe ich das jetzt nicht per Button aufzurufen.

Hab davor Scheme programmiert und blick in objektorientierter Programmierung grade nicht mehr ganz durch.

Weiß nicht, wo ich das jetzt einfügen muss, bzw. was davon wo.

Gruß,
Cyberrob
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
Ach so das video ist nicht von dir...

also wenn du in der Klasse die beiden funktionden drin hast etwa so:


using System;
using System.Text;
using System.Windows.Forms;
namespace NamedesProgramms
{
public partial class Form1 : Form
{

public string Decrypt(string text)
{ // gekürzt
}
public string Decrypt(string text)
{ // gekürzt
}
private void button1_Click(object sender, EventArgs e)
{
TextBox1.TEXT = Decrypt(TextBox2.TEXT)
}
private void button2_Click(object sender, EventArgs e)
{
TextBox2.TEXT = Decrypt(TextBox1.TEXT)
}
}
}
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
ach sooo...
du versucht in der Programm.cs zu programmieren!


klicke dein erstellen button mit doppelklick an, dann landest du im quellcode vom Formular... da machst du die decrypt und encrypt funktionen rein wie bei mir und du hast die funktion die aufgerufen wird beim klick auf den button
0 Punkte
Beantwortet von cyberrob Mitglied (737 Punkte)
Fantastisch!
Stundenlanges Rätselraten wurde innerhalb weniger Minuten gelöst.

Vielen, vielen Dank!

Das Programm läuft nun mit ein paar kleinen Veränderungen einwandfrei durch.

Viele Grüße,
Cyberrob
...