Program z użyciem tablic

0

Witajcie, otóż mam napisać program, który z jednego pliku "odczytuje" tekst i do drugiego pliku zapisuje informacje i ilości liter w postaci:
Plik wejściowy - Ala ma kota
Plik wyjściowy:
A - 4
B - 0
C - 0
itd.

Napisałem coś takiego #include <iostream>
#include<stdio.h>
#include<string>

using namespace std;

char Tablica[64];
int Tablica2[64];
char znak;
int i,j;
FILE *f;
FILE *f2;

int main()

{
j=65;
for(i=1;j<52;j++)
{
if (j==91)
j=97;
Tablica[i]=char(j);
j=j+1;
}

for(i=1;i=52; i++)
Tablica2[i]=0;

f = fopen("Test.txt", "rw");
f2 = fopen("Test2.txt", "w");

while(!feof(f))

{
    znak = fgetc(f);
    int i=1;
    while (Tablica[i] !=0)
    {
        if (znak==Tablica[i])
        Tablica[i]=Tablica[1]+1;
        i++;
        break;
    }

    int z=1;
    while (Tablica[i] !=0)

   {

    fprintf(f2,"Tablica[i] - Tablica2[i]");
    z++;
   }

   int v=1;
   while (Tablica[i] !=0)
    {
        if(Tablica2!=0)
        fprintf(f2,"Tablica[i] - Tablica2[i]");
        v++;

    }

        fclose(f);
        fclose(f2);





}
return(0);

}


Lecz niestety coś nie działa, siedzę już nad tym długi czas i nie mogę rozgryźć. Proszę o pomoc, z góry dziękuję.

Proszę także o niekopiowanie tego programu innych osób, które również potrzebują czegoś podobnego, gdyż program stworzony jest przeze mnie.
0

Po 1 co to ma byc:

 j=65;
    for(i=1;j<52;j++)
    {
        if (j==91)
        j=97;
        Tablica[i]=char(j);
        j=j+1;
    }

?
Po 2 co to ma byc?


    for(i=1;i=52; i++)     // nie powinno byc i==52?
    Tablica2[i]=0;

Powinno byc tak:
1.wczytujesz dane z pliku
2.zmodyfikowany algorytm np bucket sort o to link//edu.i-lo.tarnow.pl/inf/alg/003_sort/0020.php
3.zapisujsz dane do pliku

0

Znam podstawy, ale dopiero zaczynam z C, wcześniej robiłem w pascalu. Mam coś takiego właśnie w Turbo:


program licz;

var
 tz:array[1..52] of char;
 tw:array[1..52] of integer;
 plik_we, plik_wy, plik_wy2:text;
 znak:char;
 i,j:integer;



begin
{wypelnianie wartosciami}
 j:=65;
 for i:=1 to 52 do
 begin
    if j=91 then j:=97;
    tz[i]:=chr(j);
    j:=j+1;
 end;



 for i:=1 to 52 do
 begin
    tw[i]:=0;
 end;



 assign(plik_we,'C:/tekst.txt');
 assign(plik_wy,'C:/wynik.txt');
  assign(plik_wy2,'C:/wynik2.txt');
 reset(plik_we);
 rewrite(plik_wy);
  rewrite(plik_wy2);

{obliczenia}
 while not(eof(plik_we)) do
   begin
     read(plik_we,znak);
     for i:=1 to length(tz) do
      begin
         if znak=tz[i]
         then
          begin
            tw[i]:=tw[i]+1;
            break;
          end;

      end;
   end;

{zapis}
 for i:=1 to length(tz) do
 begin
    writeln(plik_wy,tz[i],'-',tw[i]);
 end;

 for i:=1 to length(tz) do
 begin
   if tw[i]<>0 then
    writeln(plik_wy2,tz[i],'-',tw[i]);
 end;

 close(plik_we);
 close(plik_wy);
 close(plik_wy2);
end.

No i chciałem to przepisać na C, ale pewnie znając życie to pomyliłem kilka instrukcji...

0

Nie czekam na gotowca, tylko na wskazówki, ale, że Wy jesteście mądrzejsi, to dzięki za pomoc.

0

Okej skoro znasz podstawy to zakodowanie tego algorytmu nie powinno ci sprawic trudnosci:

  1. Wczytaj to zdanie wejściowe to tablicy charów
  2. Zadeklaruj tablice n elementów(i zainicjalizuj jej elementu 0), gdzie n to liczba znaków jaka może byc wykorzystana w powyższym zdaniu ( w ascii bez rozróżniania duzych/małych liter wynosi ona bodajże 26 znaków.. tab[0] to 'A' lub 'a'; tab[1] to'B' lub 'b' ; tab[3] to'C' to 'c' itd)
    3.Wykonaj pętle od i=0 do n-1 która "przeleci" przez całe zdanie wejściowe i doda +1 do odpowiedniego elementu naszej tablicy(np jesli pierwsza literka to 'A' to zrobi tab[0]++ )
  3. Koniec w tablicy masz ilosc powtórzeń każdego z znaku
    UWAGA: musisz pamiętac, że indeksy tablicy(0,1,2..26) nie odpowiadają dokładnie wartości znaku jaki zawiera w tablicy ASCII(dla A jest ona bodajże 65) a więc odwołujesz się tak: tab[(int)A-65];
0

Dzięki, będę działał

0

na pierwszy rzut oka wydawało mi się, że przekombinowałeś ten program, więc go napisałem. dalej mi się wydaje że przekombinowałeś:

#include <cstdio>

int main()
{
  char linia[1024];
  int znaki[256] = {};
  gets(linia);
  char* p = linia;
  while(*p) znaki[(unsigned char)*p++]++; //<-- zliczanie znaków
  for (int i=0; i<256; i++)
    {
      if (znaki[i]>0)
        printf("%c (ASCII:% 4d) - %d\n",(char)i,i,znaki[i]);
    }
  return 0;
}
0

Dzięki wielkie za wskazówki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1