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