Występowanie słowa w danym ciągu.

0

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.

3

Potrzebujesz tylko map<string,int> i jedna pętle. 10 linijek kodu powinno starczyc.

0

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.

0

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;

}

0

Zacznij od zapoznania się ze strukturami.

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