Elaine |
» 2010-11-25 20:01:30 Napisałem, że napisałeś? ;>
da się tak zrobić bez dynamicznej alokacji pamięci? |
Oczywiście, że się da.
ani o tym, że należy obsługiwać dowolnie długie słowa. |
Jest dziurawe - spróbuj podać jakiś odpowiednio długi wyraz |
o kurcze :D sam sobie zaprzeczyłeś |
Nie zaprzeczyłem samemu sobie - jasne, w zadaniu nie ma niczego o tym, że należy obsługiwać pełną nazwę tytyny, ale jest taka niepisana zasada, która mówi, że program nie powinien się wywalać (a przede wszystkim nie powinien pozwalać na wykonanie zewnętrznego kodu).
do tego zadania nie da się zatem napisać niedziurawego kodu |
Da się, wystarczy chwilę pomyśleć... |
|
ison |
» 2010-11-25 20:04:38 Napisałem, że napisałeś? ;>
|
tak, zacytowałem tekst w którym to powiedziałeś
to podziel się rozwiązaniem
Da się, wystarczy chwilę pomyśleć...
|
żadnego zadania w którym użyjesz jakichkolwiek zmiennych nie da się napisać niedziurawego, zawsze przykładowo możesz podać liczbę większą niż możesz pomieścić w danym typie zmiennej, każdy kod w którym wczytujesz inta jest dziurawy wobec twoich (lub tych z których korzystasz) kryteriów |
|
Elaine |
» 2010-11-25 20:27:50 tak, zacytowałem tekst w którym to powiedziałeś |
Nie, zacytowałeś tekst, w którym powiedziałem, że twój kod tego nie obsługuje, nie napisałem, że napisałeś, że obsługuje...
żadnego zadania w którym użyjesz jakichkolwiek zmiennych nie da się napisać niedziurawego |
Da się...
zawsze przykładowo możesz podać liczbę większą niż możesz pomieścić w danym typie zmiennej |
...co zwykle nie tworzy dziury, numeric overflow sam z siebie jest najczęściej niegroźny, my tu rozmawiamy o buffer overflow...
każdy kod w którym wczytujesz inta jest dziurawy wobec twoich (lub tych z których korzystasz) kryteriów |
Nie jest.
to podziel się rozwiązaniem |
Proszę bardzo (bardzo syfiaste, jakby coś na kształt skipToWhitespace było w bibliotece standardowej to by ten kod wyglądał ładniej): #include <cstring> #include <locale> #include <iostream> using namespace std;
void skipToWhitespace( istream & istr ) { istream::sentry ok( istr, true ); if( !ok ) return; ios_base::iostate state = ios_base::goodbit; const ctype < char >& ctypeFacet = use_facet < ctype < char > >( istr.getloc() ); streambuf * streamBuffer = istr.rdbuf(); for( int meta = streamBuffer->sgetc();; meta = streamBuffer->snextc() ) { if( meta == std::char_traits < char >::eof() ) { state |= ios_base::eofbit; break; } else if( ctypeFacet.is( ctype < char >::space, std::char_traits < char >::to_char_type( meta ) ) ) break; } istr.setstate( state ); }
int main() { char buffer[ 12 ]; unsigned words = 0; while( cin ) { cin.width( 10 ); cin >> buffer; skipToWhitespace( cin ); if( strcmp( buffer, "gotowe" ) == 0 ) break; ++words; } cout << words << endl; } |
|
ison |
» 2010-11-25 21:06:40 uważasz że to jest poziom gimnazjum? (czy tam liceum czy czegokolwiek gdzie chodzi autor tematu) |
|
Elaine |
» 2010-11-25 21:17:38 Sama idea, czyli wczytanie tylko tylu znaków, by stwierdzić, czy to terminator, czy też tylko kolejny wyraz i zignorowanie dalszych - jak najbardziej. |
|
ison |
» 2010-11-25 21:18:37 idea tak ale żeby to zakodzić trzeba być haxorem, lepiej trzymać się tego co oczekuje autor zadania, a nie to co my uważamy za poprawne :) nie mówiłem że kod źródłowy w moim pierwszym poście był rozwiązaniem, to była podpowiedź domyśliłem się że w treści zadania ma podaną maksymalną wielkość stringa i sobie zmieni na taką jaką będzie chciał, nie sądziłem że ktoś się do tego przyczepi |
|
Elaine |
» 2010-11-25 21:23:29 Ten kod mógłby być prostszy - po prostu akurat taką, a nie inną implementację skipToWhitespace akurat miałem pod ręką, a nowej mi się pisać nie chciało (bo i po co, skoro ta działa? ;>).
nie mówiłem że kod źródłowy w moim pierwszym poście był rozwiązaniem, to była podpowiedź
|
To trzeba było zaznaczyć, że to była podpowiedź ;> |
|
rossd2e Temat założony przez niniejszego użytkownika |
» 2010-11-25 22:42:20 Mam jeszcze jedno pytanie. Jak trzeba w nim coś zmienić aby uzyskać program po przerobieniu z następującymi pytaniami.
Napisać program jeszcze raz ale zamiast char użyć obiektu string. Włączyć plik nagłówkowy string do porównań użyć operatorów relacyjnych |
|
1 2 « 3 » 4 |