Anagramma

« Older   Newer »
 
  Share  
.
  1. 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
     
    Top
    .
  2.  
    .
    Avatar

    "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
    CITAZIONE (Twentyone @ 20/8/2011, 12:15) 
    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 ;)
     
    Top
    .
  3. 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
     
    Top
    .
  4. meh.
     
    .

    User deleted


    CODE
    class String
     def anagram? (what)
       chars.sort == what.to_s.chars.sort
     end
    end
     
    Top
    .
  5. ~Sirius
     
    .

    User deleted


    A che serve strspn?
     
    Top
    .
  6. lumo
     
    .

    User deleted


    CITAZIONE (~Sirius @ 20/8/2011, 19:19) 
    A che serve strspn?

    www.cplusplus.com/reference/clibrary/cstring/strspn/

     
    Top
    .
  7. Twentyone
     
    .

    User deleted


    l'unico problema è con le lettere doppie.

    Per esempio inserendo osso e osoo (parola a caso) restituisce comunque True.
     
    Top
    .
  8. ~Sirius
     
    .

    User deleted


    QUOTE (lumo @ 20/8/2011, 19:29) 
    QUOTE (~Sirius @ 20/8/2011, 19:19) 
    A che serve strspn?

    www.cplusplus.com/reference/clibrary/cstring/strspn/

    In pratica controlla una quantità di caratteri presenti in una stringa (Dato un range di caratteri) e dice quanti sono?
     
    Top
    .
  9. 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.
     
    Top
    .
  10. ©$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 :asd: quindi preparatevi e leggete il codice solo se sicuri di non ammalarvi di peste :certo:
    CODICE
    Program 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.
     
    Top
    .
  11. 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
     
    Top
    .
  12. alx.
     
    .

    User deleted


    Perchè va in Segmentation Fault?
    In C : http://sprunge.us/Yfhc?c
     
    Top
    .
  13. shurizzle
     
    .

    User deleted


    http://sprunge.us/Jjgf?c
     
    Top
    .
  14. scattarotte
     
    .

    User deleted


    Ho provato questo in python e funziona
    CODICE
    def 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)
     
    Top
    .
  15. Šxel
     
    .

    User deleted


    http://sprunge.us/bOVW?cpp

    Edited by Šxel - 14/9/2012, 15:47
     
    Top
    .
15 replies since 20/8/2011, 11:15   582 views
  Share  
.