Witam. Na początku chciałbym się serdecznie przywitać, gdyż jest to mój pierwszy post oraz zakomunikować, iż z programowania jestem bardzo słaby, toteż proszę o nie zabijanie za niekumatość.
Generalnie moim zadaniem jest napisane napisane programu, który znajduje najczęściej i najrzadziej występujące słowo w pliku txt.
Stworzyłem sobie tablicę, program leci przez plik tekstowy i wrzuca do wspomnianej tablicy wszystkie słowa.
Następnie chciałbym napisać część, która będzie sprawdzała po kolei słowa z tablicy. Jeśli słowa wcześniej nie było -> wrzuć do nowej tablicy, jeśli słowo już wystąpiło policz je i posuwaj się dalej.
Nie wiem jak napisać kod, który będzie sprawdzał czy dane słowo wystąpiło? Czy ma to się odbywać literka po literce?
Piszę w Visual Studio.
Pozdrawiam.
Potrzebujesz tylko map<string,int> i jedna pętle. 10 linijek kodu powinno starczyc.
Zgaduję, że nie jest to program mający szybko działać dla liczby znaków rzędu 1,000,000 w ciągu sekundy więc wystarczy słowo przeciągnąć po całej tablicy sprawdzając przy każdej komórce czy to jest ono. Jeśli tak to dodajesz +1 do tablicy zliczającej powtórzenia słów, jeśli nie to idzie dalej. Jeśli w całej tablicy nie znajdzie takiego słowa dodaje je na końcu.
Na samym początku chciałbym przeprosić Was za tak długi brak odpowiedzi, ale mniej lub bardziej byłem zajęty, bądź coś próbowałem zdziałać z programem. Może wspomnę jeszcze, że jestem na pierwszym roku i mam na razie podstawy programowania, także przez 7/8 laborek nie byłem w stanie ogarnąć mega skomplikowanych funkcji :)
Oto mój program, który najpierw wczytuje słowa z input'a do pierwszej tablicy tab[1000][100], wiem że nie jest to optymalne, gdyż input może zawierać więcej, niż 1000 słów. Następnie leci przez wpisane słowa, zlicza i wpisuję je do tablicy jednowymiarowej a[1000] bądź zlicza bez wpisywania. Jak teraz zabrać się za wydrukowanie wyniku najczęstszego i najrzadszego słowa(lub nawet wszystkich)? Pewnie znajdziecie jeszcze inne niedociągnięcia, co mi bardzo pomoże. Program się kompiluje.
#include "stdio.h"
#include "string.h"
int main()
{
char tab[1000][100];
int j = 0;
int step = 0;
FILE*file1;
fopen_s(&file1, "input.txt", "r");
if (file1 == NULL)
{
printf("error");
}
else
{
int index = 0;
char slowo[100];
int a[1000];
for (int i = 0; i < 1000; i++)
{
a[i] = 0;
}
while (!feof(file1))
{
char c;
c = fgetc(file1);
if (c != ' ')
{
slowo[index] = c;
++index;
}
else
{
slowo[index] = '\0';
int x = 0;
for (int z = 0; z < j - 1; z++)
{
if (strcmp(slowo, tab[j]) != 0)
{
a[z]++;
x = 1;
break;
}
}
if (x == 0)
{
if (j < 1000)
{
for (int i = 0; i < 100; ++i)
{
tab[j][i] = slowo[i];
}
++j;
index = 0;
}
fclose(file1);
}
FILE*file2;
fopen_s(&file2, "output.txt", "w");
}
}
}
return 0;
}
Zacznij od zapoznania się ze strukturami.