Zliczanie liczb i wyrazów, problem

0

Witam, od wczoraj się męcze z zadaniem ze spoj'a:
,, Napisz program, który liczy, ile wyrazów i liczb znajduje się w podanej linii. "

Program napisałem, podaje dane wszystko sprawdza i u mnie jest OK.

Gdy wysyłam dla spoja ten mój program, wyskakuje mi, że jest ,,błędna odpowiedź" do zmiennej wejściowej. Wg. mnie wszystko jest perfect nie wiem wtf ;/

podsyłam kod:

 #include <iostream>
 
using namespace std;
void zerowanie(char *wsk, int rozm)
{
	for(int m=0;m<rozm; m++)
	{
	*(wsk++)=0;
	}
}
int main(void)
{
	const int DLUGOSC=50;
	char tekst[DLUGOSC];
 
	zerowanie(tekst, DLUGOSC);
 
	while(cin.getline(tekst, DLUGOSC))
	{
			int liczby=0;
			int wyrazy=0;
 
		for(int i=0; tekst[i]!=0;i++)
		{
			// INNE ZNAKI
			if( ((tekst[i]>=int(33)) && (tekst[i]<=int(47))) || ((tekst[i]>=int(58)) && (tekst[i]<=int(64))) || ((tekst[i]>=int(91)) && (tekst[i]<=int(96))) || ((tekst[i]>=int(123)) && (tekst[i]<=int(127))))
			{
				while(tekst[i]!=int(32))
				{
					i++;
					if(tekst[i]==0) break;
				}
				continue;				
			}
			//WYRAZY
			if( ((tekst[i]>=int(65)) && (tekst[i]<=int(90))) || ((tekst[i]>=int(97)) && (tekst[i]<=int(122))))
			{
				wyrazy++;
				while(tekst[i]!=int(32))
				{
					i++;
					if(tekst[i]==0) break;
				}
				--i;
				continue;
			}
			//LICZBY
			if( (tekst[i]>=int(48)) && (tekst[i]<=int(57)))
			{
				liczby++;
				while(tekst[i]!=int(32))
				{
					i++;
					if(tekst[i]==0) break;
				}
					--i;
				continue;
				
			}
			}
		if( (liczby==0) && (wyrazy==0)) 
			{
				zerowanie(tekst, DLUGOSC);
				continue; 
			}
		cout <<  liczby << ' ' << wyrazy << endl;
		zerowanie(tekst, DLUGOSC);
	} 
	
}  

Powiedzcie co jest z moim programem źle?

0

Na pierwszy rzut oka nie widzę nic źle, ale na SPOJu praktycznie zawsze są różne podchwytliwe testy na których się najprawdopodobniej wykładasz.

Np. char tekst[DLUGOSC] - jesteś pewien że będzie max 50 znaków? Jeśli tak to tak czy inaczej musisz dodać NULL na końcu. Ale zazwyczaj testy są o wiele większe...
Potestuj dla danych skrajnych, np. 0 znaków w linii, 1 wyraz w linii, 1 znak w linii, cała linia to jeden bardzo długi wyraz etc.

0

nie czaje tego, chyba wszystkie wybrane opcje spróbowałem, zrobiłem nawet poprawkę w której program przyjmuje liczby -5 itp. i dalej ,,błędna odpowiedź" ;//////

0

Nie wczytywałem się ani nie patrzyłem jak to poprawić, ale kilka uwag.

tekst[i]!=0; -- a jeśli rozmiar za duży ? :)

  1. robisz jawne rzutowanie inta np. 32 na inta :) i potem porównujesz z charem :D czyli dwa rzutowania
    Nie lepiej zamiast char(48) lepiej chyba i bez błędu napisać '0' :)

  2. nie wiem czy jest jjakakolwiek różnica przy if {continue} a if else if... ale wydaje mi sięże z else if byłoby czytelniejsze ;)

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