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 |