Kahden tekstimerkkijonon anagrammien vertailu on suuri ongelmanratkaisutehtävä ohjelmointitaidon parantamiseksi.
Anagrammi on merkkijono, joka muodostetaan järjestämällä uudelleen eri merkkijonon kirjaimet. Sen tarkistaminen, ovatko kaksi merkkijonoa toistensa anagrameja, saattaa kuulostaa vaikealta, mutta se on vain vähän hankalaa ja petollisesti suoraviivaista. Tässä artikkelissa opit tarkistamaan, ovatko kaksi merkkijonoa toistensa anagrameja C ++: n, Pythonin ja JavaScriptin avulla.
Ongelma
Sinulle annetaan kaksi merkkijonoa s1 ja s2, sinun on tarkistettava, ovatko nämä kaksi merkkijonoa anagrammia vai eivät.
Esimerkki 1: Olkoon s1 = "luova" ja s2 = "reaktiivinen".
Koska toinen merkkijono voidaan muodostaa järjestämällä uudelleen ensimmäisen merkkijonon kirjaimet ja päinvastoin, nämä kaksi merkkijonoa ovat toisistaan anagrammeja.
Esimerkki 2: Olkoon s1 = "Peter Piper poimittu nokka suolakurkkua" ja s2 = "Peck marinoitua paprikaa, jonka Peter Piper poimi".
Koska toista merkkijonoa ei voida muodostaa järjestelemällä uudelleen ensimmäisen merkkijonon kirjaimia ja päinvastoin, nämä kaksi merkkijonoa eivät ole toistensa anagrameja.
Prosessi sen tarkistamiseksi, ovatko kaksi merkkijonoa toisistaan anagrammeja
Voit seurata alla olevaa lähestymistapaa tarkistaaksesi, ovatko kaksi merkkijonoa toistensa anagrameja:
- Vertaa molempien merkkijonojen pituutta.
- Jos molempien merkkijonojen pituus ei ole sama, se tarkoittaa, että ne eivät voi olla toistensa anagrameja. Palauta siis väärä.
- Jos molempien merkkijonojen pituus on sama, jatka eteenpäin.
- Lajittele molemmat merkkijonot.
- Vertaa molempia lajiteltuja merkkijonoja.
- Jos molemmat lajitellut merkkijonot ovat samat, se tarkoittaa, että ne ovat toistensa anagrameja. Palaa siis tosi.
- Jos molemmat lajitellut merkkijonot ovat erilaisia, se tarkoittaa, että ne eivät ole toistensa anagrameja. Palauta siis väärä.
Liittyvät: Kuinka tarkistaa, onko merkkijono palindromi
C ++ -ohjelma tarkistamaan, ovatko kaksi merkkijonoa toistensa anagrameja
Alla on C ++ -ohjelma, jolla tarkistetaan, ovatko kaksi merkkijonoa toistensa anagrameja vai eivät:
#sisältää
käyttämällä nimitilaa vakio;
boolitarkistus Anagrammit (merkkijono s1, merkkijono s2)
{
int-koko1 = s1.pituus ();
int-koko2 = s2.pituus ();
// Jos molempien merkkijonojen pituus ei ole sama,
// se tarkoittaa, että he eivät voi olla toistensa anagrameja.
// Palauta siis väärä.
jos (koko1! = koko2)
{
return false;
}
lajittelu (s1.begin (), s1.end ());
lajittelu (s2.begin (), s2.end ());
for (int i = 0; i {
jos (s1 [i]! = s2 [i])
{
return false;
}
}
palaa tosi;
}
int main ()
{
merkkijono s1 = "kuuntele";
merkkijono s2 = "hiljainen";
cout << "Merkkijono 1:" << s1 << endl;
cout << "Merkkijono 2:" << s2 << endl;
jos (tarkistaAnagrammit (s1, s2))
{
cout << "Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" << endl;
}
muu
{
cout << "Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" << endl;
}
string s3 = "Tervetuloa MUO: han";
merkkijono s4 = "MUO tervetuloa";
cout << "Merkkijono 3:" << s3 << endl;
cout << "Merkkijono 4:" << s4 << endl;
jos (tarkistaAnagrammit (s3, s4))
{
cout << "Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" << endl;
}
muu
{
cout << "Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" << endl;
}
string s5 = "Peter Piper poimi nokan peitattuja paprikoita";
string s6 = "Pick marinoituja paprikoita, jotka Peter Piper poimi";
cout << "Merkkijono 5:" << s5 << endl;
cout << "Merkkijono 6:" << s6 << endl;
jos (tarkistaAnagrammit (s5, s6))
{
cout << "Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" << endl;
}
muu
{
cout << "Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" << endl;
}
string s7 = "Hän myy simpukoita meren rannalla";
string s8 = "meren kuoret meren rannalla";
cout << "Merkkijono 7:" << s7 << endl;
cout << "Merkkijono 8:" << s8 << endl;
jos (tarkistaAnagrammit (s7, s8))
{
cout << "Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" << endl;
}
muu
{
cout << "Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" << endl;
}
merkkijono s9 = "luova";
merkkijono s10 = "reaktiivinen";
cout << "Merkkijono 9:" << s9 << endl;
cout << "Merkkijono 10:" << s10 << endl;
jos (tarkistaAnagrammit (s9, s10))
{
cout << "Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" << endl;
}
muu
{
cout << "Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" << endl;
}
paluu 0;
}
Tuotos:
Jono 1: kuuntele
Jono 2: hiljainen
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Jono 3: Tervetuloa MUO: han
Jono 4: MUO tervetuloa
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Jono 5: Peter Piper poimi nokan peitattuja paprikoita
Jono 6: Pick marinoituja paprikoita, jotka Peter Piper poimi
Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja
Jono 7: Hän myy simpukoita meren rannalla
Jono 8: simpukat meren rannalla
Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja
Jono 9: luova
Jono 10: reaktiivinen
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Liittyvät: Kuinka laskea merkkijonossa esiintyvän merkin esiintymät
Python-ohjelma sen tarkistamiseksi, ovatko kaksi merkkijonoa toistensa anagrameja
Alla on Python-ohjelma tarkistaaksesi, ovatko kaksi merkkijonoa toistensa anagrameja vai eivät:
def-tarkistus Anagrammit (s1, s2):
koko1 = len (s1)
koko2 = len (s2)
# Jos molempien merkkijonojen pituus ei ole sama,
# se tarkoittaa, että he eivät voi olla toistensa anagrameja.
# Palauta siis väärä.
jos koko1! = koko2:
paluu 0
s1 = lajiteltu (s1)
s2 = lajiteltu (s2)
i: lle alueella (0, koko1):
jos s1 [i]! = s2 [i]:
palauta False
palaa True
s1 = "kuuntele"
s2 = "hiljainen"
tulosta ("String 1:", s1)
tulosta ("String 2:", s2)
jos (tarkistaAnagrammit (s1, s2)):
tulosta ("Kyllä, nämä kaksi merkkijonoa ovat toisistaan anagrameja")
muu:
tulosta ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja")
s3 = "Tervetuloa MUO: han"
s4 = "MUO tervetuloa"
tulosta ("String 3:", s3)
tulosta ("String 4:", s4)
jos (tarkistaAnagrammit (s3, s4)):
tulosta ("Kyllä, nämä kaksi merkkijonoa ovat toisistaan anagrameja")
muu:
tulosta ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja")
s5 = "Peter Piper poimi nokan suolakurkkua"
s6 = "Pick suolakurkkua, jonka Peter Piper poimi"
tulosta ("String 5:", s5)
tulosta ("String 6:", s6)
jos (tarkistaAnagrammit (s5, s6)):
tulosta ("Kyllä, nämä kaksi merkkijonoa ovat toisistaan anagrameja")
muu:
tulosta ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja")
s7 = "Hän myy simpukoita meren rannalla"
s8 = "simpukat meren rannalla"
tulosta ("String 7:", s7)
tulosta ("String 8:", s8)
jos (tarkistaAnagrammit (s7, s8)):
tulosta ("Kyllä, nämä kaksi merkkijonoa ovat toisistaan anagrameja")
muu:
tulosta ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja")
s9 = "luova"
s10 = "reaktiivinen"
tulosta ("String 9:", s9)
tulosta ("String 10:", s10)
jos (tarkistaAnagrammit (s9, s10)):
tulosta ("Kyllä, nämä kaksi merkkijonoa ovat toisistaan anagrameja")
muu:
tulosta ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja")
Tuotos:
Jono 1: kuuntele
Jono 2: hiljainen
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Jono 3: Tervetuloa MUO: han
Jono 4: MUO tervetuloa
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Jono 5: Peter Piper poimi nokan peitattuja paprikoita
Jono 6: Pick marinoituja paprikoita, jotka Peter Piper poimi
Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja
Jono 7: Hän myy simpukoita meren rannalla
Jono 8: simpukat meren rannalla
Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja
Jono 9: luova
Jono 10: reaktiivinen
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Liittyvät: Kuinka löytää vokaaleja, konsonantteja, numeroita ja erikoismerkkejä merkkijonosta
Tarkista, ovatko kaksi merkkijonoa toistensa anagrameja JavaScriptissä
Alla on JavaScript-ohjelma, jolla tarkistetaan, ovatko kaksi merkkijonoa toisistaan anagrameja vai eivät:
toiminnon tarkistusAnagrammit (s1, s2) {
olkoon koko1 = s1.pituus;
olkoon koko2 = s2.pituus;
// Jos molempien merkkijonojen pituus ei ole sama,
// se tarkoittaa, että he eivät voi olla toistensa anagrameja.
// Palauta siis väärä.
jos (koko1! = koko2)
{
return false;
}
s1.lajittaa ();
s2.lajittaa ();
for (olkoon i = 0; i {
jos (s1 [i]! = s2 [i])
{
return false;
}
}
palaa tosi;
}
var s1 = "kuuntele";
var s2 = "hiljainen";
document.write ("Merkkijono 1:" + s1 + "
");
document.write ("Merkkijono 2:" + s2 + "
");
jos (checkAnagrams (s1.split (""), s2.split (""))) {
document.write ("Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" + "
");
} muu {
document.write ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" + "
");
}
var s3 = "Tervetuloa MUO: han";
var s4 = "MUO tervetuloa";
document.write ("Merkkijono 3:" + s3 + "
");
document.write ("Merkkijono 4:" + s4 + "
");
jos (checkAnagrams (s3.split (""), s4.split (""))) {
document.write ("Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" + "
");
} muu {
document.write ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" + "
");
}
var s5 = "Peter Piper poimi nokan suolakurkkua";
var s6 = "Pick suolakurkkua, jonka Peter Piper poimi";
document.write ("Merkkijono 5:" + s5 + "
");
document.write ("Merkkijono 6:" + s6 + "
");
jos (checkAnagrams (s5.split (""), s6.split (""))) {
document.write ("Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" + "
");
} muu {
document.write ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" + "
");
}
var s7 = "Hän myy simpukoita meren rannalla";
var s8 = "simpukat meren rannalla";
document.write ("Merkkijono 7:" + s7 + "
");
document.write ("Merkkijono 8:" + s8 + "
");
jos (checkAnagrams (s7.split (""), s8.split (""))) {
document.write ("Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" + "
");
} muu {
document.write ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" + "
");
}
var s9 = "luova";
var s10 = "reaktiivinen";
document.write ("Merkkijono 9:" + s9 + "
");
document.write ("Merkkijono 10:" + s10 + "
");
jos (checkAnagrams (s9.split (""), s10.split (""))) {
document.write ("Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrameja" + "
");
} muu {
document.write ("Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja" + "
");
}
Tuotos:
Jono 1: kuuntele
Jono 2: hiljainen
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Jono 3: Tervetuloa MUO: han
Jono 4: MUO tervetuloa
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Jono 5: Peter Piper poimi nokan peitattuja paprikoita
Jono 6: Pick marinoituja paprikoita, jotka Peter Piper poimi
Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja
Jono 7: Hän myy simpukoita meren rannalla
Jono 8: simpukat meren rannalla
Ei, nämä kaksi merkkijonoa eivät ole toistensa anagrameja
Jono 9: luova
Jono 10: reaktiivinen
Kyllä, nämä kaksi merkkijonoa ovat toistensa anagrammeja
Liittyvät: Kuinka löydät hahmon ASCII-arvon?
Opi käyttämään oikeita resursseja koodaamiseen
Jos haluat vahvistaa koodaustaitojasi, on tärkeää oppia uusia käsitteitä ja viettää aikaa niiden avulla. Yksi tapa tehdä tämä on ohjelmointisovellukset, joiden avulla voit oppia erilaisia ohjelmointikonsepteja samalla kun pidät hauskaa.
Haluatko tehostaa koodaustaitojasi? Nämä sovellukset ja verkkosivustot auttavat sinua oppimaan ohjelmoinnin omaan tahtiisi.
Lue seuraava
- Ohjelmointi
- JavaScript
- Python
- C Ohjelmointi
Yuvraj on tietojenkäsittelytieteen perustutkinto-opiskelija Delhin yliopistossa Intiassa. Hän on intohimoisesti Full Stack -verkkokehitys. Kun hän ei kirjoita, hän tutkii eri tekniikoiden syvyyttä.
tilaa uutiskirjeemme
Liity uutiskirjeeseemme, jossa on teknisiä vinkkejä, arvosteluja, ilmaisia e-kirjoja ja erikoistarjouksia!
Tilaa napsauttamalla tätä