Ahojte,chtel jsem se zeptat jsetli byste mi nemohli poradit s jednim programem musim mit tu definici struktura ve funkci void,snazim se to do te funkci nasekat,ale kdyz to udelam tak mi to nejede,nepomohl by mi s tim nekdo prosim vas.ten kod je nasledujici
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct struktura_s struktura_t;
struct struktura_s
{
int pocet;
char *slovo;
struktura_t *dalsi;
int celkem_slov;
};
void *Pocitej_Slova(char *slovo, void *parametr)
{
if(!parametr) {
int i=0;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
struktura_t *nova = malloc(sizeof(struktura_t));
while(slovo[i]){kopie[i]=slovo[i]; i++;}
kopie[i]=0x0;
nova->pocet = 1;
nova->slovo = kopie;
nova->celkem_slov = 1;
nova->dalsi = NULL;
return nova;
}
else if(!slovo) {
int slov, i = 0;
struktura_t *prvek = (struktura_t*) parametr;
void **pole = (void**) malloc(2*sizeof(void*));
slov = (prvek->celkem_slov) ;
pole[0] = (char*) malloc(slov*sizeof(char*));
pole[1] = (int*) malloc(slov*sizeof(int*));
((char **)(pole[0]))[slov] = NULL;
((int *)(pole[1]))[slov] = 0;
while(slov>i) {
((char **)(pole[0]))[i] = prvek->slovo;
((int *)(pole[1]))[i] = prvek->pocet;
prvek = prvek->dalsi;
i++;}
return pole;
}
else{
int i, stav;
struktura_t *prvek, *pomocny_prvek, *new_prvek, *zacatek;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
new_prvek = malloc(sizeof(struktura_t));
zacatek = malloc(sizeof(struktura_t));
prvek = (struktura_t*) parametr;
zacatek = (struktura_t*) parametr;
for(i=0; slovo[i]!=0x0;i++) kopie[i]=slovo[i]; kopie[i]=0x0;
while(1)
{stav = strcmp(kopie, prvek->slovo);
if(!stav) {prvek->pocet = prvek->pocet + 1; return parametr;}
else if(stav < 0) {
new_prvek->dalsi = prvek;
new_prvek->celkem_slov = zacatek->celkem_slov +1;
parametr = new_prvek;
break;}
else if(stav > 0) {
if(!prvek->dalsi) {
prvek->dalsi = new_prvek;
new_prvek->dalsi = NULL;
break;}
else if((strcmp(kopie, (prvek->dalsi)->slovo)>0)||(strcmp(kopie, (prvek->dalsi)->slovo)==0))
{prvek = prvek->dalsi; continue;}
else {pomocny_prvek = prvek->dalsi;
prvek->dalsi = new_prvek;
new_prvek->dalsi = pomocny_prvek;
break;}}
prvek = prvek->dalsi;}
new_prvek->slovo = kopie;
new_prvek->pocet = 1;
zacatek->celkem_slov = zacatek->celkem_slov + 1;
parametr = (void*)parametr;
return parametr;
}
}
int main(int argc, char *argv[])
{
void *p;
p = Pocitej_Slova("nazdar", NULL);
p = Pocitej_Slova("ahoj", p);
p = Pocitej_Slova("cau", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova(NULL, p);
//printf("\"%s\" %d\n", ((char **)(p[0]))[2], ((int*)(p[1]))[2]);
system("PAUSE");
return 0;
}