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