Avatar billede musicchart.dk Nybegynder
01. april 2003 - 10:00 Der er 10 kommentarer og
1 løsning

Rykke antal tegn i alfabtet

Hey eksperter

Jeg er ved at lave noget kryptering, og vil gerne have hjælp til at rykke hvert tegn i en streng fx 5 "felter" hen.


Så "hej" fx bliver til "mjo"


/Bjarke
Avatar billede soreno Praktikant
01. april 2003 - 10:04 #1
Du kan godt sige:
char test = 'a';
test = test + 5;

System.out.println(test);
Avatar billede soreno Praktikant
01. april 2003 - 10:05 #2
Du skal så bare passe på når du kommer hen til enden af alfabetet - så skal du jo wrappe rundt og starte med 'a'.
Avatar billede arne_v Ekspert
01. april 2003 - 10:05 #3
Brug StringBuffer og setCharAt !
Avatar billede musicchart.dk Nybegynder
01. april 2003 - 10:06 #4
ja netop, det er der problemet kommer... når jeg kommer til enden af alphabetet + andet (ialt 255 tegn).
Avatar billede disky Nybegynder
01. april 2003 - 10:07 #5
lav en modulos på tallet.

char test = 'a';
test = test + 5;

test%=255;

så er den wrappet rundt, måske skal der typecastes lidt.
Avatar billede arne_v Ekspert
01. april 2003 - 10:09 #6
public class Caesar {
    public static void main(String[] args) {
        String s = "hej";
        String s2 = encrypt(s);
        System.out.println(s2);
    }
    public static String encrypt(String s) {
        StringBuffer sb = new StringBuffer(s);
        for(int i = 0; i < sb.length(); i++) {
            sb.setCharAt(i, (char)(sb.charAt(i) + 5));
        }
        return sb.toString();
    }
}
Avatar billede arne_v Ekspert
01. april 2003 - 10:11 #7
Og hvis du skal håndtere wrap around:

public class Caesar {
    public static void main(String[] args) {
        String s = "hej";
        String s2 = encrypt(s);
        System.out.println(s2);
    }
    public static String encrypt(String s) {
        StringBuffer sb = new StringBuffer(s);
        for(int i = 0; i < sb.length(); i++) {
            sb.setCharAt(i, (char)(byte)(sb.charAt(i) + 5));
        }
        return sb.toString();
    }
}
Avatar billede arne_v Ekspert
01. april 2003 - 10:12 #8
Og husk at som kryptering er algoritmen ikke meget værd !

:-)
Avatar billede musicchart.dk Nybegynder
01. april 2003 - 10:16 #9
ok, jeg vil lige tænke lidt over det...

arne_v >> heh.. narj, men jeg konvereterer også bogstaverne til int :O)
Avatar billede arne_v Ekspert
01. april 2003 - 10:23 #10
Begge veje:

public class Caesar {
    public static void main(String[] args) {
        String s = "hej";
        System.out.println(encrypt(s));
        System.out.println(decrypt(s));
        System.out.println(decrypt(encrypt(s)));
        System.out.println(encrypt(decrypt(s)));
    }
    public static String encrypt(String s) {
        StringBuffer sb = new StringBuffer(s);
        for(int i = 0; i < sb.length(); i++) {
            sb.setCharAt(i, (char)(byte)(sb.charAt(i) + 5));
        }
        return sb.toString();
    }
    public static String decrypt(String s) {
        StringBuffer sb = new StringBuffer(s);
        for(int i = 0; i < sb.length(); i++) {
            sb.setCharAt(i, (char)(byte)(sb.charAt(i) - 5));
        }
        return sb.toString();
    }
}
Avatar billede musicchart.dk Nybegynder
11. april 2003 - 00:15 #11
tak arne_v.... det virker perfekt!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester