-
Twentyone.
User deleted
Programma che, inserendo in input due parole, stampa true se sono una l'anagramma dell'altro e false se non lo sono.
io in C++ l'ho risolto così: (ovviamente consigli sono ben accetti)CODICE#include <iostream>
#include <string.h>
using namespace std;
int main () {
int i;
char prima[20], seconda[20];
cout <<"Inserire prima parola: ";
cin >>prima;
cout <<"\nInserire seconda parola: ";
cin >>seconda;
if (strlen(prima) != strlen(seconda)) {
cout <<"Impossibile, parole di lunghezza diversa";
} else {
i = strlen(prima);
if (strspn(prima, seconda) == i && strspn(seconda, prima) == i) {
cout <<"\nTrue";
} else {
cout <<"\nFalse"; }
}
}
Edited by Twentyone - 20/8/2011, 12:37. -
.
"Se passa un giorno in cui non ho fatto qualcosa legato all'informatica, è come se avessi trascurato qualcosa di essenziale. È come se mi fossi dimenticato di svegliarmi."
- Group
- Member
- Posts
- 1,417
- Location
- Da dove meno te lo aspetti!
- Status
- Anonymous
Programma che, inserendo in input due parole, stampa true se sono una l'anagramma dell'altro e false se non lo sono.
io in C++ l'ho risolto così: (ovviamente consigli sono ben accetti)CODICE#include <iostream>
#include <string.h>
using namespace std;
int main () {
int i;
char prima[20], seconda[20];
cout <<"Inserire prima parola: ";
cin >>prima;
cout <<"\nInserire seconda parola: ";
cin >>seconda;
if (strlen(prima) != strlen(seconda)) {
cout <<"Impossibile, parole di lunghezza diversa";
} else {
i = strlen(prima);
if (strspn(prima, seconda) == i || strspn(seconda, prima) == i) {
cout <<"\nTrue";
} else {
cout <<"\nFalse"; }
}
}
Solo una cosa: usa il tipo string per le parole e non char. -
Twentyone.
User deleted
ah giusto, avevo messo l'array perchè inizialmente pensavo di fare l'esercizio controllando ogni lettera con 2 cicli for nidificati ma usciva un casino, poi mi son dimenticato di cambiare..
Edited by Twentyone - 20/8/2011, 13:01. -
meh..
User deleted
CODEclass String
def anagram? (what)
chars.sort == what.to_s.chars.sort
end
end. -
~Sirius.
User deleted
A che serve strspn? . -
lumo.
User deleted
www.cplusplus.com/reference/clibrary/cstring/strspn/
. -
Twentyone.
User deleted
l'unico problema è con le lettere doppie.
Per esempio inserendo osso e osoo (parola a caso) restituisce comunque True.. -
~Sirius.
User deleted
In pratica controlla una quantità di caratteri presenti in una stringa (Dato un range di caratteri) e dice quanti sono?. -
Twentyone.
User deleted
controlla se i singoli caratteri della seconda stringa sono presenti nella prima e ritorna il numeri dei caratteri che corrispondono. Il problema che ho riscontrato delle doppie è dovuto proprio a questo, se anche la stessa lettera è ripetuta, basta che nella stringa ci sia una volta che vale comunque per entrambe. . -
©$Dr.Rap$©.
User deleted
Perdonatemi, non uso il Pascal da mesi e mesi, e non l'ho veramente mai studiato, e non ho neanche un compilatore sul mio Ubuntu quindi preparatevi e leggete il codice solo se sicuri di non ammalarvi di peste CODICEProgram anagramma;
uses crt;
var j : char;
mat : array['a'..'b','a'..'z'] of integer;
x,y : integer;
parolaa, parolab : string;
cont : boolean;
begin
clrscr;
for j:='a' to 'z' do
begin
mat['a',j]:=0;
mat['b',j]:=0;
end;
writeln('Inserisci le due parole separate da uno spazio');
readln(parolaa,parolab);
x:=lenght[parolaa];
y:=lenght[parolab];
for i:=1 to x do
for j:='a' to 'z' do
if parolaa[i] = j then mat['a',j]:=mat['a',j]+1;
for i:=1 to y do
for j:='a' to 'z' do
if parolab[i] = j then mat['b',j]:=mat['b',j]+1;
cont:=true;
for j:='a' to 'z' do
if mat['a',j] <> mat['b',j] then cont:=false;
if cont:=true then writeln(parolaa,' e ', parolab,' sono l''una anagramma dell''altra')
else
writeln('Le due parole non sono l''una anagramma dell''altra');
end.. -
lumo.
User deleted
Eccolo in C++. La funzione lavora su un qualsiasi container generico, a patto che ci sia l'overload dell'operatore < per il tipo utilizzato
http://ideone.com/woezo. -
alx..
User deleted
Perchè va in Segmentation Fault?
In C : http://sprunge.us/Yfhc?c. -
shurizzle.
User deleted
http://sprunge.us/Jjgf?c . -
scattarotte.
User deleted
Ho provato questo in python e funziona CODICEdef parole(parola1,parola2):
lettere1=[]
lettere2=[]
for p in parola1:
lettere1.append(p)
for r in parola2:
lettere2.append(r)
lettere1.sort()
lettere2.sort()
if lettere1==lettere2:
print True
else:
print False
parola1=raw_input('inserisci parola')
parola2=raw_input('inserisci altra parola')
parole(parola1,parola2). -
Šxel.
User deleted
http://sprunge.us/bOVW?cpp
Edited by Šxel - 14/9/2012, 15:47.