liczenie występień cyfr w liczbie

0

Witam,
chcę napisać funkcję, która policzy mi, ile razy w podanej liczbie wystąpiła dana cyfra. Wydaje się prościutkie, lecz co bym nie robił, z jakiegoś powodu funkcja ciągle zwraca 0.

int tab(long long liczba, int cyfra)
{
	string liczbas = to_string(liczba);
	int wynik=0;
	for (int k=0; k < liczbas.size(); k++)
	{
		if ((int)liczbas[k]==cyfra)
			wynik++;
	}
	return wynik;
}

2

Znaki cyfr w ASCII mają inną wartość niż sama cyfra, więc np '1' != 1.

0

Problem jest w porównaniu

if ((int)liczbas[k]==cyfra)

gdzie znak (typ char) rzutujesz na typ int co nie jest równe cyfrze tylko kodowi ASCII.
Na przykład dla wywołania

tab(888888,8);

zawsze sprawdzany jest warunek 56 == 8

4

Rozszerzając wypowiedź poprzedników, możesz od wartości znaku odjąć '0' i otrzymasz wartość liczbową cyfry:

auto s = to_string(12345);
assert(s[2] - '0' == 3);

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