Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Java: JavaFX: merkin korvaus

JRokka [16.05.2020 15:19:50]

#

Korvataan aina seuraava merkkijonossa oleva pieni kirjain /-merkillä.

package merkki_korvaus;


import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;

public class Merkki_korvaus extends Application {



    String mjn = "";
    String edellinen ="";
    int merkki = 96;
    public void start(Stage stage){
        TextField teksti = new TextField();
        Text tulos = new Text("Teksti");
        Button nappain = new Button("Tulos");
        TilePane r = new TilePane();
        r.getChildren().add(teksti);
        r.getChildren().add(tulos);
        r.getChildren().add(nappain);
        EventHandler<ActionEvent> event = (ActionEvent e) -> {
            mjn = teksti.getText();
            if (!edellinen.equals(mjn)){
                //Uusi merkkijono.
                merkki = 96;
                edellinen = mjn;
            }
            else {
                //Korvataan merkki.
                String m = "";
                do {
                    merkki++;
                    m = String.valueOf((char)(merkki));
                    if (merkki >= 122){
                        //Aloitetaan alusta.
                        merkki = 96;
                    }
                } while (!mjn.contains(m));

                //Korvataan kaikki kohdat.
                tulos.setText(mjn.replaceAll(m,"/"));

            }
        };
        nappain.setOnAction(event);
        Scene scene = new Scene(r,200,200);
        stage.setTitle("Ohjelma");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args){
        launch(args);
    }
}

JRokka [16.05.2020 23:47:56]

#

#include <iostream>
#include <string>
using namespace std;

int main(){
 string mjn = "jaakaappipakastin";
 string merkit = "";
 int maara = 0;
 int merkki = 96;
 //Etsitään korvattavat merkit.
 while (maara < 4){
   do {
    merkki++;
   } while (mjn.find((char)(merkki)) == std::string::npos);
   merkit += (char)(merkki);
   maara++;
 }
 string tulos =  "";
 //Muodostetaan merkkijono.
 for (int x = 0; x < mjn.length(); x++){
  if (merkit.find(mjn.at(x)) != std::string::npos){
   tulos += "/";
  }
  else {
   tulos += mjn.at(x);
  }
 }
//Näytetään tulos.
 cout << tulos << endl;


 return 0;
}

Teuro [17.05.2020 07:59:33]

#

Jotenkin teet jälleen kauhean vaikeasti tuon asian. Lisäksi ainakin C++ toteutus ei toimi ollenkaan kuten pitäisi. Esimerkkiohjelmasi tulostaa virheellisen merkkijonon.

jrokka.exe kirjoitti:

//////pp/p///st/n

Pitäisi kuvauksen mukaan tulostaa pelkkiä /-merkkejä, koska jokainen merkkijonon kirjain on pieni kirjain. Lisäksi koodissa olevat taikanumerot aiheuttavat kummastusta. Miksi koodissa pitää olla näitä? Lisäksi alkuperäinen koodi korvannee vain 4 erilaista merkkiä /-merkillä, kun pitäisi korvata kaikki merkit.

#include <iostream>
#include <string>

int main(){
	std::string merkkijono = "K0rVamaTTo";
	std::string korvaus = "/";

	/** Käydään koko merkkijono lävitse **/
	for (int i = 0; i < merkkijono.length(); ++i) {
		if (merkkijono[i] >= 'a' && merkkijono[i] < 'z') {
			merkkijono.replace(i, 1, korvaus);
		}
	}

	std::cout << merkkijono << std::endl;

	return 0;
}

Tulostus on tavoitteen mukainen
K0/V///TT/

teuro.exe kirjoitti:

K0/V///TT/

Vastaus

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

Tietoa sivustosta