codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct lista_s{
char* parola;
struct lista_s *next;
} lista;
char consonanti [21] = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's' , 't', 'v', 'w', 'y', 'x', 'z'};//
char vocali [5] = { 'a', 'e', 'i' ,'o', 'u'};//
int vocale_f (char c);
int consonante_f (char c);
char** function_b (lista** Ptr,int* lung);
void function_c (lista **Ptr);
void function_d(FILE* pointer, char** vett, int index, char * string);
void inserisci_lista ( lista ** Ptr, char *string);
int verifica_parola (char* vett);
int main (int argc, char* argv[])
{
char Vc[8]; //
int vett[7];//
int i,k,k1,k2,k3,k4,k5,k6,L;//inserire inizializzazioni
char alfabeto [10][4] = { "0000","0000","abc" , "def" , "ghi", "jkl", "mno", "pqrs", "tuv" , "wxyz" };
char parola [8];//
FILE *fp;//
lista *elenco=NULL;
char** copia;
if (argc != 3)
printf("errore argomenti");
else
{
if((sscanf(argv[1], "%s", Vc)!= 1))
printf("errore argomento");
else
{*/
for (i=0; i<7; i++) {
//vett[i]=atoi(Vc[i]);
vett[i]=Vc[i]-'0';
if (vett[i]==0 || vett[i]==1){
printf("errore");
return 0;
}
}
for (k=0; k<strlen(alfabeto[vett[0]]); k++){
parola[0]= alfabeto[vett[0]][k];
for (k1=0; k1<strlen(alfabeto[vett[1]]); k1++){
parola[1]= alfabeto[vett[1]][k1];
for (k2=0; k2<strlen(alfabeto[vett[2]]); k2++){
parola[2]= alfabeto[vett[2]][k2];
for (k3=0; k3<strlen(alfabeto[vett[3]]); k3++){
parola[3]= alfabeto[vett[3]][k3];
for (k4=0; k4<strlen(alfabeto[vett[4]]); k4++){
parola[4]= alfabeto[vett[4]][k4];
for (k5=0; k5<strlen(alfabeto[vett[5]]); k5++){
parola[5]= alfabeto[vett[5]][k5];
for (k6=0; k6<strlen(alfabeto[vett[6]]); k6++){
parola[6]= alfabeto[vett[6]][k6];
if (verifica_parola(parola)){//mancava l'argomento
//printf("%s\n",parola);
inserisci_lista(&elenco, parola);//mancavano gli argomenti
}
}
}
}
}
}
}
}
copia=function_b(&elenco,&L);//mancavano parametri
if ((fp=fopen(argv[2], "r"))!=NULL) {
function_d(fp,copia,L,Vc);//mancavano argomenti
}
else
printf("impossibile aprire file");
function_c(&elenco);//mancavano parametri
// }
//}
return 0;
}
int verifica_parola (char* vett)
{
int trovato = 0,i, counter = 0;
for (i=0;i<20 && !trovato;i++)
if (vett[0]==consonanti[i])
trovato = 1;
if (trovato==1)
{
for (i=0;i<5 && trovato; i++)
if (vett[6] == vocali [i])
trovato = -1;
}
if (trovato==-1) {
for ( i=1; i<7; i++)
{
if (consonante_f(vett[i-1]) && consonante_f(vett[i])) {
counter++;
if (counter==4)
return 0;
}
else
counter = 0;
}
counter = 0;
for (i=1;i<6;i++)
{
if (vocale_f(vett[i]) && vocale_f(vett[i+1]))
{
counter++;
if (counter==3)
return 0;
}
else counter = 0;
}
return 1;
}
return 0;
}
int vocale_f (char c) //mancava
{
int i;
for (i=0;i<5 ; i++)
if (c == vocali [i])
return 1;
return 0;
}
int consonante_f (char c)//mancava
{
int i;
for (i=0;i<20;i++)
if (c == consonanti[i])
return 1;
return 0;
}
void inserisci_lista ( lista ** Ptr, char *string)
{
lista *n_pt, *p_pt, *c_pt;
n_pt =(lista *) malloc(sizeof(lista));
if (n_pt != NULL)
{
strcpy ( n_pt->parola, string);
n_pt->next = NULL;
p_pt = NULL;
c_pt = * Ptr;
while (c_pt != NULL && strcmp(string, c_pt->parola)>0) {//avevo sbagliato e scritto string > c_pt
p_pt = c_pt;
c_pt = c_pt->next;
}
if (p_pt == NULL) {
n_pt->next = *Ptr;
*Ptr = n_pt;
}
else {
p_pt->next =n_pt;
n_pt->next =c_pt;
}
}
else {
printf("memoria non disponibile");
}
}
void function_c (lista **Ptr)
{
lista * c_pt;
while (*Ptr!=NULL) {
c_pt = *Ptr;
*Ptr = (*Ptr)->next;
free(c_pt);
}
}
char** function_b (lista** Ptr,int* lung)//non avevo messo l'ultimo parametro
{
int index=0;
int i;//
char **vettd;
lista* temp;
temp = *Ptr; //avevo scritto *temp
while (*Ptr != NULL) {
*Ptr= (*Ptr)->next;
index++;
}
*Ptr = temp; //
*lung= index; //
vettd = malloc (index*sizeof(char*));
for (i=0; i<index; i++) {
vettd[i] = malloc(7*sizeof(char));
}
index=0;
while (temp != NULL) {//avevo messo *temp
strcpy(vettd[index],temp->parola);
temp=temp->next;//avevo scritto *temp=(*temp)->next
index++;
}
return vettd; //non avevo messo vettd
}
void function_d(FILE* pointer, char** vett, int index, char * string) //non avevo mess l'ultimo parametro
{
char cercato[8];
int i;
while ((fscanf(pointer, "%s", cercato))!= EOF){ //non avevo messo while
for (i=0; i<index; i++) {
if (strcmp(cercato, vett[i])==0)
{
printf("indice %d, parola %s, codifica %s\n", index, cercato, string);
}
}
}
}