si, è vero sono un idiota... non ho postato il codice... che tuttavia ora funziona!!!
Scrivendo il post ho notato che il valore assunto dall'indice era il numero progressivo della sua riga!!! stranissimo... ho provato a spostarlo con qualche "a capo", a ricompilare, a cancellare di nuovo gli "a capo" e a ricompilare ed adesso funziona. Posto comunque il codice, perchè non mi va la funzione di inserimento "ordinato in una lista"... se qualcuno mi da un'occhiata...
/*
Esercizio del suffisso
Scrivere un programma che legga da tastiera una stringa P ,
un intero N e una sequenza S di N stringhe. Il programma deve
stampare in ordine lessicografico tutte le stringhe distinte
in S che hanno P come suffisso. L’input è formattato nel seguente
modo: la prima riga contiene la stringa P mentre la seconda riga
contiene l’intero N . Seguono N righe contenenti una stringa
ciascuna. L’output a video deve contenere solo e soltanto le
stringhe distinte che soddisfano la condizione sopra ordinate
lessicograficamente e stampate una per riga. Si può assumere che
le stringhe contengano soltanto caratteri alfanumerici ciascuna
di esse sia lunga al più 100 caratteri.
Esempio
Input
to
9
pluto
abra
pippo
raba
pluto
baar
oppip
lupto
paperino
Output
lupto
pluto
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max 100
//defining complex types and struct
typedef struct node_{
char * str;
struct node_ * next;
}node;
typedef node * list;
//defining function to read strings in input and create an array
char **leggi(int *N){
int i;
char **stringhe;
scanf("%d", N);
stringhe = (char **)malloc(sizeof (char *) * (*N));
for ( i = 0; i < *N; i++ ) {
stringhe = (char *)malloc(sizeof(char)*(max+1));
scanf("%s", stringhe);
}
return stringhe;
}
//defining function to insert (sorty) element in a list
list insert(char * s,list L){
node * new=malloc(sizeof(node));
new->str=s;
if (L==NULL){
new->next=NULL;
L=new;
}
else{
list curr=L;
while((curr->next!=NULL) && (strcmp(s,curr->next->str)<=0))
curr=curr->next;
new->next=curr->next;
curr->next=new;
}
return L;
}
//defining function to check if an element is included in a list
int included(char * s,list L){
list curr=L;
int flag=0;
while((curr!=NULL) && (flag==0)){
if (strcmp(s,curr->str)==0) flag=1;
curr=curr->next;
}
return flag;
}
//Main
int main(){
int N,p_lenght,i,j,h,k,str_lenght;
char ** dictionary;
char * pattern;
char * suffix;
list L,curr;
//reading pattern
pattern=malloc((max+1) * sizeof(char));
scanf("%s",pattern);
p_lenght=strlen(pattern);
//creating dictionary
scanf("%d",&N);
dictionary=leggi(&N);
L=NULL;
for(i=0 ; i<N ; i++){
str_lenght=strlen(dictionary);
j=str_lenght - p_lenght;
suffix=malloc(p_lenght * sizeof(char));
k=0;
for(h=j ; h<str_lenght ; h++){
suffix[k]=dictionary[h];
k++;
}
if ((strcmp(pattern,suffix)==0) && !included(dictionary,L))
L=insert(dictionary,L);
}
curr=L;
while(curr!=NULL){
printf("%s\n",curr->str);
curr=curr->next;
}
return 0;
}
Ultima modifica effettuata da Lello90 il 30/05/2010 alle 20:17 |