liczenie najczęściej/najrzadziej powtarzających się liter

0

Zakładając że w ciągu znaków znajdują się tylko małe litery od a-z napisałam coś takiego:

int liczZnaki(char *napis)
{
	int i=0;
	while (napis[i] != 0) i++;
	return i;
}

	char *napis = "alla cccmmacccc kkkoootabbb";
	int litera = 0;
	char najwiecej;
	char najmniej;
	int temp=0;

	int liczbaZnakow = liczZnaki(napis);

	int temp2 = liczZnaki(napis);

	for (int i=0; i<liczbaZnakow; i++)
	{
		int m=0;
		while (m<liczbaZnakow)
		{
		if (napis[i] == napis[m]) litera++;
		m++;
		}

		if (litera<temp2)
		{
		najmniej = napis[i];
		temp2 = litera;
		}

		if (litera>temp)
		{
		najwiecej = napis[i];
		temp = litera;
		}

		litera = 0;
	}
	
	

	cout << "Najczesciej: " << najwiecej << endl
		<< "Najrzadziej: " << najmniej << endl;
	
	system ("PAUSE");
	return 0;

Jeśli najrzadziej/najczęściej występuje więcej liter w podanym ciągu to wtedy podaje jakąkolwiek z nich.

Chodzi mi o to żeby to jednak jakość prościej napisać, wiem że istnieje inne rozwiązanie wykorzystując to że literze a odpowiada liczba 97, 'z' = 122. Jak to tym sposobem zrobić?

0

Zdefiniuj są tablicę char litery[123] i wyzeruj ją. Przechodząc przez wszystkie litery pokolei zwiększaj ich licznik ++litery[napis[i]];
Później tylko posortować.

0

nawet sortowac nie trzeba jak potrzebna tylko najczesciej i najrzadziej wystepujaca litera. przeiterowac po tablicy i pamietac najwieksza i najmniejszą wartosc

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