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.