[RISOLTO] esercizio stringhe

di il
13 risposte

[RISOLTO] esercizio stringhe

Devo fare un programma che caricate due stringhe si devono vedere se sono l'una l'anagramma dell'altra (utilizzando 2 array "contatori").
Se lo sono output=1 sennò output=0.
Ho scritto il codice ma poi inspiegabilmente una volata caricati le stringhe il programma si blocca...

questo è il codice che ho creato io:
#include <stdio.h>
void reset (int a[],int len) {
	int i=0;
	for (i=0; i<len;i++) {
		a[i]=0;
	}
}
void add (int a[],int len,char val) {
	if ((val>0)&&(val<len)) {
		a[val]++;
	}
}

int anagramma(unsigned char *s1, unsigned char *s2) {
	int a1[256],a2[256];
	int i=0;
	int j=0;
	reset (a1,256);
	reset (a2,256);
	while (s1!='\0') {
		add (a1,256,s1[i]);
		i++;
	}
	while (s2!='\0') {
		add (a1,256,s2[i]);
		i++;
	}
	for (j=0; j<256;j++) {
		if (a1[i]!=a2[i]) {
			printf ("0");
			return 0;
		}
	}
	printf ("1");
}

int main() {
	unsigned char *s1;
	unsigned char *s2;
	s1=malloc(1001*sizeof(unsigned char));
	s2=malloc(1001*sizeof(unsigned char));
scanf ("%s",&s1);
	scanf ("%s",&s2);
	anagramma (s1,s2);
return 0;
}
sapete dirmi dove sta il problema?

13 Risposte

  • Re: [RISOLTO] esercizio stringhe

    Cambia il titolo secondo il regolamento altrimenti saremmo costretti a chiuderlo.
  • Re: [RISOLTO] esercizio stringhe

    Bè,cerchi di far leggere due puntatori a unsigned char , e usi nella scanf "&s1", è normale che crashi
  • Re: [RISOLTO] esercizio stringhe

    Sarebbe bello sapere anche cosa intendi per anagramma...
  • Re: [RISOLTO] esercizio stringhe

    Ho messo il titolo dell'esercizio...praticamente il programma deve vedere se due parole hanno le stesse lettere (e in uguale quantità) per esempio:

    "Pizza" e "pazzi"
  • Re: [RISOLTO] esercizio stringhe

    Comunque se metto "s1" senza la "&" crasha subito appena inserisco il valore(parola) alla stringa
  • Re: [RISOLTO] esercizio stringhe

    Il titolo è sempre più brutto.... Help! ma ovvio che hai bisogno di aiuto altrimenti andavi ad amarti un po da solo...............

    vabbhe...

    Uno le stringhe sono CHAR e non unsigned char
    Due il metodo corretto per prelevare una stringa è tramite la funzione fgets() a cui bisognerà eliminare lo \n finale
    Tre studiati la strchr()
  • Re: [RISOLTO] esercizio stringhe

    L'esercizio mi impone di usare unsigned char

    P.S. la tua battuta era del tutto fuori luogo...
  • Re: [RISOLTO] esercizio stringhe

    la tua battuta era del tutto fuori luogo...
    come il tuo titolo no?
    hai letto il regolamento?
    Non volevo comunque offendere nessuno, scusa se è successo.

    Puoi usare la fgets? E la stchr?
  • Re: [RISOLTO] esercizio stringhe

    Non è specificato nell'esercizio...vedendo però alcuni codici dei miei compagni di corso non sono state usate nessuna delle due...
  • Re: [RISOLTO] esercizio stringhe

    Ma a scuola le hai studiate?
    tutto quello che hai studiato è lecito usarlo.
  • Re: [RISOLTO] esercizio stringhe

    Io sono entrato nel secondo semestre del primo anno di informatica quindi sinceramente non so se le hanno fatte o no però ripeto ho visto creare codici funzionanti per questo esercizio anche senza usarle...secondo te non si puo' fare come ho fatto io? Cioè partendo dal mio codice c'è la maniera di "sistemarlo" seguendo però quella logica?
    grazie in anticipo
  • Re: [RISOLTO] esercizio stringhe

    Si basta controllare che tutte le lettere di una parola sono dentro all' altra:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    int strallin(char* a, char* b)
    {
        int sz = strlen(b);
            if ( strlen(a) != sz ) return 0;
            
        char* stb = b;
        int* ck = malloc(sz * sizeof(int));
        memset(ck,0,sz * sizeof(int));
        int* stck = ck;
        int fail = 0;
        
        for(; *a && !fail; ++a)
        {
            for( fail = 1, b = stb, ck = stck; *b; ++b, ++ck)
            {
                if ( *a == *b && !*ck )
                {
                    *ck = 1;
                    fail = 0;
                    break;
                }
            }
        }
        
        free(stck);
        return !fail;
    }
    
    
    int main()
    {
        char* w1 = "hello world";
        char* w2 = "oellh rldow";
        char* w3 = "ciao  mondo";
        
        int ret = strallin(w1,w2);
        printf("%s %s anagramma di %s\n",w2, (ret)? "è":"non è", w1);
        
        ret = strallin(w1,w3);
        printf("%s %s anagramma di %s\n",w3, (ret)? "è":"non è", w1);
        
        return 0;
    }
    
  • Re: [RISOLTO] esercizio stringhe

    Grazie delle risposte ma il codice aveva dei difettucci (più che stupidi) e basta.

    Per chi avesse il mio stesso problema il codice corretto è il seguente:
    #include <stdio.h>
    #include <string.h>
    void reset (int a[],int len) {
    	int i=0;
    	for (i=0; i<len;i++) {
    		a[i]=0;
    	}
    }
    void add (int a[],int len,int val) {
    	if ((val>0)&&(val<len)) {
    		a[val]++;
    	}
    }
    
    int anagramma(unsigned char *s1, unsigned char *s2) {
    	int a1[256],a2[256];
    	int i=0;
    	int j=0;
    	reset (a1,256);
    	reset (a2,256);
    	while (s1[i]!='\0') {
    		add (a1,256,s1[i]);
    		i++;
    	}
    	i=0;
    	while (s2[i]!='\0') {
    		add (a2,256,s2[i]);
    		i++;
    	}
    	for (j=0; j<256;j++) {
    		if (a1[j]!=a2[j]) {
    			printf ("0");
    			return 0;
    		}
    	}
    	printf ("1");
    }
    
    int main() {
    	unsigned char s1[1001];
    	unsigned char s2[1001];
    	scanf ("%s",s1);
    	scanf ("%s",s2);
    	anagramma (s1,s2);
    return 0;
    }
Devi accedere o registrarti per scrivere nel forum
13 risposte