Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: Osajono

JRokka [07.11.2019 20:17:53]

#

Ohjelmassa etsitään osajonoja ensimmäisestä merkkijonosta. Tarkistettavat osajonot otetaan toisesta merkkijonosta. Ohjelmassa tulostetaan koko osajono, eli esimerkiksi tulostetaan merkki eikä m, me, mer, merk, merkk, merkki.

koodi

import java.util.Scanner;

public class Osajonot {
    public static void main(String[] args){
        Scanner syote = new Scanner(System.in);
        String mjn = "";
        String mjn_2 = "";
        String ojn = "";
        int indeksi = 0;
        boolean onko = false;
        //Syötetään lähtötiedot.
        do {
            System.out.println("Syötä kaksi merkkijonoa.");
            System.out.println("Ensimmäisen tulee olla toista pidempi.");
            mjn = syote.next();
            mjn_2 = syote.next();
        } while (mjn.length() <= mjn_2.length());
        //Etsitään osajonot.
        //Osajonot otetaan toisesta merkkijonosta
        //Sen jälkeen katsotaan, löytyykö kyseinen osajono ensimmäisestä merkkijonosta.
        //Osajonon osia ei tulosteta erikseen vaan koko osajono.
        for (int x = 0; x < mjn_2.length(); x++){
            onko = false; //Oletetaan aluksi, että osajonoa ei ole.
            for (int y = x+1; y <= mjn_2.length(); y++){
                if (mjn.contains(mjn_2.substring(x,y))){
                    //Osajono löydetty.
                    //Katsotaan, kuuluuko osajonoon lisää merkkejä.
                    //Seuraavaa osajonoa etsitään nykyisen osajonon lopun jälkeen.
                    onko = true;
                    ojn = mjn_2.substring(x,y);
                    indeksi = y-1;
                }
            }
            //Tulostetaan koko osajono lopuksi.
            if (onko == true){
                x = indeksi; //Etsitään osajonoa myöhemmistä kohtaa.
                System.out.println(ojn);
            }
        }
    }
}

JRokka [08.11.2019 14:16:03]

#

Tällä tavalla saadaan tietyn pituisia osajonoja. Esimerkissä kolmen merkin pituisia osajonoja.

for (int x = 0; x < mjn_2.length(); x++){
            maara = 0;
            onko = false;
            for (int y = x+1; y <= mjn_2.length(); y++){
                if (mjn.contains(mjn_2.substring(x,y))){
                    //Osajono löydetty.
                    //Katsotaan, kuuluuko osajonoon lisää merkkejä.
                    //Seuraavaa osajonoa etsitään nykyisen osajonon lopun jälkeen.
                    onko = true;
                    maara++;
                    ojn = mjn_2.substring(x,y);
                    indeksi = y-1;
                }
            }
            //Tulostetaan koko osajono lopuksi.
            if (onko == true){
                x = indeksi; //Etsitään osajonoa myöhemmistä kohtaa.
                if (maara == 3){
                    System.out.println(ojn);
                }
            }

        }

Tronic [10.11.2019 09:08:10]

#

Python:

haystack = input("Mistä etsitään: ")
needles = input("Minkä osia etsitään: ")
while needles:
    needle = needles
    while needle not in haystack:
        needle = needle[:-1]
    if needle:
        print(needle)
        needles = needles[len(needle):]
    else:
		needles = needles[1:]

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta