Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C][ncurses] liczenie znaków

# 03 Gru 2010 13:16 1266 3
  • #1 03 Gru 2010 13:16
    #
    Poziom 13  

    Witam!
    Siedzę od ładnych paru godzin nad błahym problemem, którego nie jestem w stanie rozwiązać. Pobieram z pliku ciąg znaków do globalnie zadeklarowanej tablicy a następnie próbuję inną funkcją policzyć w niej znaki. Próbowałem za pomocą jednej funkcji, z użyciem struktury przechowującej poszczególne wiersze (tak jak chce aby program wyglądał) ale przepisałem to na jeden ciąg żeby pozbyć się tylko problemu ze zliczaniem. Używam bibliotek : ncurses i stdio. A kody wyglądają tak :

    Code:
     
    
    char ciag_wejsciowy[];
    char znak;
    int ilosc_wierszy;

    void czytaj()
    {
         FILE *fp;
       fp = fopen("dane.txt", "r");
       int i = 0, w = 0;
         while((znak = getc(fp)) != EOF)
       {
         ciag_wejsciowy[i] = znak;
         if(znak == '\n')
         {
           ilosc_wierszy++;
         }
         i++;
       }
       ilosc_wierszy++;
       ciag_wejsciowy[i] = '\0';
     
    }

    int licz()
    {
      int ile = 0;
      while(ciag_wejsciowy[ile] != '\0')
      {
        ile++;
      }
       return ile;
    }

    Bardzo proszę o rady. Ilość znaków w wierszu jest mi strasznie potrzebna do jakichkolwiek dalszych prac nad programem.
    Pozdrawiam #

    0 3
  • #2 03 Gru 2010 15:00
    chudybyk
    Poziom 26  

    Witam!
    Po pierwsze zadeklaruj tablicę o stałej wartości albo przydziel sobie pamięć poprzez alloc();. Inaczej będziesz miał kłopoty.

    Chcesz policzyć znaki w całym pliku, czy w kolejnych wierszach? Co w zasadzie chcesz policzyć?
    Czy dane z pliku będą do czegoś jeszcze potrzebne? Być może nie potrzebujesz żadnej tablicy?

    Dobrym pomysłem wydaje się policzenie samych znaków '\n', a potem dodanie 1 - masz ilość wierszy.

    Poniżej niesprawdzony kod, który powinien zliczyć ilość znaków w każdym wierszu i umieścić je w tablicy. Maksymalna ilość wierszy to 1000. Nie liczą się znaki '\n'.

    Code:
     
    
    char znak;
    int ilosc_wierszy;
    int znaki_w_wierszach[1000];

    void czytaj()
    {
         FILE *fp;
       fp = fopen("dane.txt", "r");
       int i = 0;
         while((znak = getc(fp)) != EOF)
       {
         if(znak == '\n')
         {
                znaki_w_wierszach[ilosc_wierszy] = i;
           ilosc_wierszy++;
         }else  i++;
       }
    }


    Daj znać czy działa.
    Pozdrawiam!

    0
  • #3 03 Gru 2010 15:02
    blackra
    Poziom 2  

    rozumiem że chcesz zliczyc liczbę znaków w poszczególnych wierszach

    zobacz czy o to Ci chodziło

    Code:
    #include <stdio.h>
    
    #include <string.h>

    char ciag_wejsciowy[];
    char znak;
    int ilosc_wierszy;

    void czytaj()
    {
         FILE *fp;
       fp = fopen("dane.txt", "r");
       int i = 0, w = 0;
         while((znak = getc(fp)) != EOF)
       {
         ciag_wejsciowy[i] = znak;
         if(znak == '\n')
         {
           ilosc_wierszy++;
         }
         i++;
       }
       ilosc_wierszy++;
       ciag_wejsciowy[i] = '\n';
       ciag_wejsciowy[i+1] = '\0';
    }

    int licz(int poczatek)
    {
        int ile=0;
      while(ciag_wejsciowy[poczatek] != '\n' &&ciag_wejsciowy[poczatek] != '\0' )
      {
        ile++;
     poczatek++;
      }
       return ile;
    }

    int main()
    {int liczba=0;
     czytaj();
     printf("ok\n");
    int start=0;
     liczba=licz(0);

     while(liczba=licz(start))
     {
     printf("liczba znakow %d\n",liczba);
     start=start+liczba+1;
     }
           int j;
           for(j=0;j < strlen(ciag_wejsciowy);j++)  // wyswietlenie zawartosci tmp
    printf("%c",ciag_wejsciowy[j]);
    }



    pozdrawiam

    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    0
  • #4 05 Gru 2010 13:47
    #
    Poziom 13  

    Dzięki za odp ;)
    Kod chudybyk'a był bardzo pomocny ;)
    zamykam

    0