Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z tablico struktur

Ostatnio zmodyfikowano 2014-11-14 13:11
Autor Wiadomość
urbanek126
Temat założony przez niniejszego użytkownika
Problem z tablico struktur
» 2014-11-14 13:11:39
Problem polega glownie z struktura linie i w tym zapisie, dzieki z gory za pomoc
C/C++
/* struct linie wektory[skorowidz.ile_slow];
  for(i=0;i<skorowidz.ile_slow;i++){            // chce tworzyc kilka struktur linie ,dla kazdego slowa inna struktura linie
     struct linie  *wektory[i] = zainicjuj_wektor();
*/
Działanie programu polega na wyszukiwaniu slow w pliku i wypisywanie w ktorych liniach wystapila dane slowo np
./a.out dane.txt co tam
slowo co wystapila w 6,14,15 
slowo tam wystapila 10 90 ,102:

program4.c: In function ‘main’:
program4.c:42:13: error: variable-sized object may not be initialized
program4.c:42:21: warning: unused variable ‘wektory’ [-Wunused-variable]
program4.c:60:4: error: incompatible type for argument 1 of ‘dodaj’
program4.c:20:6: note: expected ‘struct linie *’ but argument is of type ‘struct linie’
program4.c: In function ‘wypisz_skorowidz’:
program4.c:112:19: error: invalid type argument of ‘->’ (have ‘struct linie’)
program4.c:114:32: error: invalid type argument of ‘->’ (have ‘struct linie’)
program4.c:115:25: error: invalid type argument of ‘->’ (have ‘struct linie’)
C/C++
#include <stdio.h>  // wiadomo po co#include <stdio.h>  // wiadomo po co
#include <stdlib.h>
#include <string.h> // strstr

#define BUFSIZE 8192   // zakĹ‚adamy, ĹĽe linie bÄ™dÄ… krĂłtsze niĹĽ 8kB

struct linie {
    int * elementy; // ma przechowywac numery linii
    int size; // rozmiar tablicy
    int licznik; // ilosc elementow w tablicy
};

typedef struct {
    int ile_slow;
    char ** slowa;
} skorowidz_t;

struct linie * zainicjuj_wektor( void ); //tworzy tablice dynamiczna

void dodaj( struct linie * wektor, int linia ); //dodaje linie do tablic dynamicznych

struct linie * powiekszam( struct linie * wektor ); // powieksza miesjce w tablichac dynamicznych

void zainicjuj_skorowidz( int argc, char ** argv, skorowidz_t * s );

void wypisz_skorowidz( skorowidz_t * s, struct linie * wektory );
int
main( int argc, char ** argv ) {
    int i;
    int ile_linii; // nummery linii
    char buf[ BUFSIZE ];
   
    FILE * in = argc > 1 ? fopen( argv[ 1 ], "r" )
        : stdin;
   
    skorowidz_t skorowidz;
   
    zainicjuj_skorowidz( argc, argv, & skorowidz );
   
    struct linie wektory[ skorowidz.ile_slow ];
    for( i = 0; i < skorowidz.ile_slow; i++ ) { // chce tworzyc kilka struktur linie ,dla kazdego slowa inna struktura linie
        struct linie * wektory[ i ] = zainicjuj_wektor();
    }
   
    if( skorowidz.ile_slow == 0 ) {
        fprintf( stderr, "%s: bĹ‚Ä…d: proszÄ™ podać sĹ‚owa do wyszukiwania\n", argv[ 0 ] );
        return EXIT_FAILURE;
    }
   
    if( in == NULL ) {
        fprintf( stderr, "%s: bĹ‚Ä…d: nie mogÄ™ czytać pliku %s\n", argv[ 0 ], argv[ 1 ] );
        return EXIT_FAILURE;
    }
   
    ile_linii = 0;
    while( fgets( buf, BUFSIZE, in ) != NULL ) { // pobiera linie z pliku
        ile_linii++; // ktora linia jest brana teraz pod uwage
        for( i = 0; i < skorowidz.ile_slow; i++ )
        if( strstr( buf, skorowidz.slowa[ i ] ) != NULL ) { // szuka slowa  w danej linii
            dodaj( wektory[ i ], ile_linii );
        }
    }
   
    wypisz_skorowidz( & skorowidz, wektory );
   
    return EXIT_SUCCESS;
}

void zainicjuj_skorowidz( int argc, char ** argv, skorowidz_t * skorowidz ) {
    int i;
    skorowidz->ile_slow = argc - 2;
    skorowidz->slowa = malloc( skorowidz->ile_slow * sizeof * skorowidz->slowa );
    for( i = 2; i < argc; i++ ) {
        skorowidz->slowa[ i - 2 ] = argv[ i ];
       
    }
}
struct linie * zainicjuj_wektor( void ) {
   
    struct linie * wektor = malloc( sizeof * wektor );
    if( wektor == NULL )
         return NULL;
   
    wektor->elementy = malloc( 1 * sizeof * wektor->elementy );
    if( wektor->elementy == NULL ) {
        free( wektor );
        return NULL;
    }
    wektor->size = 1;
    wektor->licznik = 0;
    return wektor;
}
struct linie * powiekszam( struct linie * wektor ) {
    int * wektornowy = realloc( wektor->elementy, 2 * wektor->size * sizeof * wektor->elementy );
    if( wektornowy == NULL )
         return NULL;
   
    wektor->size *= 2;
    wektor->elementy = wektornowy;
    return wektor;
}
void dodaj( struct linie * wektor, int linia ) {
    if( wektor->size <= wektor->licznik )
    if( powiekszam( wektor ) == NULL )
         return;
   
    wektor->elementy[ wektor->licznik ] = linia;
    wektor->licznik++;
    return;
}
void wypisz_skorowidz( skorowidz_t * skorowidz, struct linie * wektory ) {
    int i, j;
   
    for( i = 0; i < skorowidz->ile_slow; i++ ) {
        if( wektory[ i ]->licznik > 0 ) {
            printf( "sĹ‚owo \"%s\" wystÄ…piĹ‚o w liniach:", skorowidz->slowa[ i ] );
            for( j = 0; j < wektory[ i ]->licznik; j++ )
                 printf( "%d", wektory[ i ]->elementy[ j ] );
           
            printf( "\n" );
        } else {
            printf( "nie napotkano sĹ‚owa \"%s\"\n", skorowidz->slowa[ i ] );
        }
    }
}
[/i]
P-120571
« 1 »
  Strona 1 z 1