Kryptera text uppgift
Skriv en metod static string krypt(string t, int k) som krypterar texten med en slumpnyckel( det betyder att du byter ut bokstäver i texten mot andra som finns på plats bokstav + slumpnyckel, t.ex. om jag har a i texten och nyckel är 2, så blir det c istället för a i det krypterade texten).
Skriv en metod som dekrypterar texten.
Anropa metoder i ett program, fråga efter texten, slumpa slumpnyckeln i programmet.
Slumpnyckel ska ge vid varje körning en annan kryptering.
Jag har försökt lösa denna första uppgift (kryptera texten) men förstår inte varför jag får fel. Jag har använt mig av unicode för att få fram bokstäverna och deras positionering.
static string krypt(string t, int k)
{
int uniStart = 97;
char[] uniList = new char[25];
for (int i = 0; i < uniList.Length; i++)
{
uniList[i] = (char)uniStart;
uniStart++;
}
char[] bokstavsLista = t.ToCharArray();
string output = "";
for (int i = 0; i < bokstavsLista.Length; i++)
{
for (int j = 0; j > i; j++)
{
if (bokstavsLista[i] == uniList[i])
{
output += uniList[i + 2];
}
}
}
return output;
Kan du beskriva med text vad du försöker göra i for-looparna?
Flezer skrev:Kan du beskriva med text vad du försöker göra i for-looparna?
static string krypt(string t, int k)
{
int uniStart = 97;
char[] uniList = new char[25];
// Ger varje element i uniList bokstäverna från a-z
for (int i = 0; i < uniList.Length; i++)
{
uniList[i] = (char)uniStart;
uniStart++;
}
// Skapar en lista med varje enskild bokstav från text-strängen
char[] bokstavsLista = t.ToCharArray();
string output = "";
// Kollar vilka bokstäver som finns i bokstavsLista (texten) som också finns i Unicode-listan
for (int i = 0; i < bokstavsLista.Length; i++)
{
for (int j = 0; j > i; j++)
{
if (bokstavsLista[i] == uniList[i])
{
// Byter bokstaven mot bokstaven som är 2 tecken framåt i Unicode-listan
bokstavsLista[i] += uniList[i + k];
}
}
}
// Lägger in varje utbytt bokstav i en sträng
foreach (char bokstav in bokstavsLista)
{
output += bokstav;
}
// Returnerar strängen
return output;
Vad blir det för fel?
Laguna skrev:Vad blir det för fel?
Det kommer ingen text. Blir helt tomt när jag startar programmet.
Det kan ju bero på hur den här funktionen anropas.
Laguna skrev:Det kan ju bero på hur den här funktionen anropas.
Har provat att anropa metoden med t.ex. krypt("Hejsan", 5); men inget händer.
Funktionen returnerar en sträng. Vad gör du med den?
Laguna skrev:Funktionen returnerar en sträng. Vad gör du med den?
Haha dum man är. Okej nu fungerar det med Console.WriteLine(krypt("Hejsan", 5)) men då kommer det bara fram Hejsan. Alltså är det något med metoden som är fel...
j > i är inte sant för j = 0, så looparna gör ingenting.
Stoppa in write på intressanta saker lite här och där så du ser vad som händer.
Laguna skrev:j > i är inte sant för j = 0, så looparna gör ingenting.
Stoppa in write på intressanta saker lite här och där så du ser vad som händer.
// Kollar vilka bokstäver som finns i bokstavsLista (texten) som också finns i Unicode-listan
for (int i = 0; i < bokstavsLista.Length; i++)
{
for (int j = 0; j > uniList.Length; j++)
{
if (bokstavsLista[i] == uniList[j])
{
// Byter bokstaven mot bokstaven som är k tecken framåt i Unicode-listan
bokstavsLista[i] += uniList[j + 2];
Console.WriteLine(bokstavsLista[i]);
}
}
}
Sant. Ändrade lite i koden nu. Men if-satsen blir aldrig true. Varför blir det så?
Laguna skrev:j > i är inte sant för j = 0, så looparna gör ingenting.
Stoppa in write på intressanta saker lite här och där så du ser vad som händer.
string t = "Hejsan";
char[] storaBok = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
char[] småBok = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
// Skapar en lista med varje enskild bokstav från text-strängen
char[] bokstavsLista = t.ToCharArray();
string output = "";
// Kollar vilka bokstäver som finns i bokstavsLista (texten) som också finns i Unicode-listan
for (int i = 0; i < bokstavsLista.Length; i++)
{
for (int j = 0; j > storaBok.Length; j++)
{
if (bokstavsLista[i] == storaBok[j])
{
// Byter bokstaven mot bokstaven som är k tecken framåt i Unicode-listan
bokstavsLista[i] += storaBok[j + 2];
Console.WriteLine(bokstavsLista[i]);
}
else if (bokstavsLista[i] == småBok[j])
{
// Byter bokstaven mot bokstaven som är k tecken framåt i Unicode-listan
bokstavsLista[i] += småBok[j + 2];
Console.WriteLine(bokstavsLista[i]);
}
}
}
// Lägger in varje utbytt bokstav i en sträng
foreach (char bokstav in bokstavsLista)
{
output += bokstav;
}
Console.WriteLine(output);
Console.ReadKey();
Testade en ny variant nu, fungerade inte heller...
Halloj,
Kolla lite noggrannare på villkoret i din inre for-loop.
for (int j = 0; j > storaBok.Length; j++)
En for-loop itereras så länge villkoret är true.