{
stringstream ss;
ss << str;
string temp;
double found;
while (!ss.eof()) {
ss >> temp;
if (stringstream(temp) >> found) {
/* check if string has '.' */
if (temp.find(".") != string::npos) {
return true;
}
}
return false;
temp = "";
}
}
funkcja nie jest pełna, co się ma zdarzyć jesli while się nie wykona, co funkcja ma zwrócić?
Nie jest to też do końca poprawnie:
-
Zwracanie wartości "true" jest umieszczone wewnątrz pętli while, co oznacza, że zawsze zwróci wartość "true" dla pierwszej liczby znalezionej w ciągu i nigdy nie przejdzie do reszty ciągu.
-
Zwracanie wartości "false" jest umieszczone po pętli while, co oznacza, że zawsze zwróci wartość "false", niezależnie od tego, czy znaleziono liczbę czy nie.
Przeanalizuj to :
bool SzukajLiczby1_1(string str)
{
bool czyZnalezionoLiczbe = false;
for(int i = 0; i < str.length(); i++)
{
if(isdigit(str[i]))
{
czyZnalezionoLiczbe = true;
break;
}
}
return czyZnalezionoLiczbe;
}
Co się tu dzieje ?
Wykorzystana jest pętla "for" do przejścia przez każdy znak w ciągu. Wewnątrz pętli sprawdzane jest, czy każdy znak jest cyfrą, używając funkcji isdigit() z biblioteki cctype.
Jeśli znajdę cyfrę, ustawiana zostaje zmienna boolowska "czyZnalezionoLiczbe" na true i pętle się kończy za pomocą "break". Na końcu funkcji zwracana jest zmienna boolowska "czyZnalezionoLiczbe".