typedef struct Elem {
char * str;
struct Elem *next;
} Elem, *List;
Scrivere una funzione List extr(char *sA[], int n, int (*f)(char *))
che preso in input un array sA di n stringhe e il puntatore ad una funzione f,
ritorna una lista i cui elementi sono di tipo Elem e che contiene le stringhe s dell'array
sA tali che f(s) ha un valore diverso da zero. Le stringhe contenute
nella lista ritornata non devono essere allocate. Ad esempio, se f è la funzione che ritorna un
valore diverso da zero quando la stringa di input ha lunghezza 4 e
sA = ["mela", "limone", "uva", "mela", "pera"] (quindi n = 5),
allora la funzione ritorna una lista che contiene le stringhe "mela", "mela", "pera",
l'ordine non conta.
typedef struct {
long cod;
char info[10]; //una stringa di lunghezza inferiore a 10
} Rec;
Scrivere una funzione int txt2bin(char *tF, char *bF) che preso in input il
nome (dato dalla stringa tF) di un file di testo che contiene una sequenza del
tipo C1 S1 C2 S2 ..., dove i Ck sono interi positivi e gli Sk sono stringhe
alfabetiche, crea un file binario, con nome dato dalla stringa bF, che per ogni coppia Ck Sk del primo file
con lunghezza di Sk inferiore a 10 contiene un record Rk di tipo Rec
tale che Rk.cod = Ck e Rk.info = Sk. La funzione ritorna il numero di coppie del file binario. È garantito che
gli Sk hanno lunghezza inferiore a 100. Ad esempio, se il primo file contiene:
1203 martello 1305 chiodo 2345 cacciavite 28768 limaAllora, la funzione crea un file binario che contiene i seguenti record:
{1203, "martello"}, {1305, "chiodo"}, {28768, "lima"}
e ritorna 3.
typedef struct SElem {
char * str; //stringa allocata dinamicamente
struct SElem *next;
} SElem, *SList;
Scrivere una funzione SList repcpy(SList L, int k, SList R) che sostituisce il k-esimo
elemento della lista L con una copia della lista R e ritorna la lista modificata.
Se un tale elemento non c'è, la funzione ritorna la lista L inalterata.
Nella copia di R anche le stringhe dei campi str devono essere duplicate. Esempi:
L = blue → gray → green k = 1 R = red → red ===> L = red → red → gray → green L = blue → gray → green k = 2 R = red → red ===> L = blue → red → red → green L = blue → gray → green k = 1 R = NULL ===> L = gray → green L = blue → gray → green k = 4 R = red → red ===> L = blue → gray → green