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); } }
#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; }
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/
Aihe on jo aika vanha, joten et voi enää vastata siihen.