Wątek przeniesiony 2015-05-26 13:49 z C/C++ przez ŁF.

Znalezienie błędu nieskończonego zapętlenia

0

Witam, czy moglbym prosic o pomoc w znalezieniu tutaj bledu? Generalnie funkcja ma zliczac wystapienia liter w tekscie jednak za kazdym razem utknie mi w petli nieskonczonej, i nigdy nie przechodzi do warunku else, tak jakby nigdy nie bylo przypadku string::npos. Czy ktos z was widzi gdzie tu jest blad?

void Znak::ilosc_wystapien()
{
	int liczba = 0;
	int tab[128];
	size_t pozycja = 0;

	for (int i = 0; i <= 127; i++)
	{
		tab[i] = 0;
		pozycja = 0;
		for (; ;)
		{
			
			pozycja = tekst.find(char(liczba), pozycja);

			if (pozycja != string::npos)
			{
				

				(tab[i])++;
				cout << tab[i] << endl;
				
			}
			else
			{
				
				liczba++;
				break;
				
			}
		}
		
		
	}
	


	for (int i = 0; i < 127; i++)
	{
		
		
	}
}
0

w for sa 2 sredniki tylko jakas buzka sie zrobila dziwna ;p

0

Kod należy otaczać znacznikami <cpp></cpp> lub <code=cpp></code>.

Przekombinowałeś pętlę.
Zrób to normalnie iterując po napisie, a nie po wszystkich możliwych znakach:

for (int i=0; i<tekst.size(); ++i) {
    char ch = tekst[i];
    ………
}
0

ja bym uzyl do tego mapy (albo unorder_map) gdzie
Key = litera
value = liczba wystapien

zlozonosc spada i nie ma takich dziwnych tworkow jak powyzej ;)

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