program ile razy występuje wyraz/litera w tekście
Ostatnio zmodyfikowano 2013-05-15 16:11
NHFL Temat założony przez niniejszego użytkownika |
program ile razy występuje wyraz/litera w tekście » 2013-05-14 14:06:27 witam w 2h napisałem taki program i co prawda nie widzę w nim żadnych błedów ale chciałbym się zapytać profesjonalistów czy istnieją błędy wykonywalne ;) bo takie są najtrudniejsze do wykrycia #include <iostream> #include <conio.h> using namespace std; int szukanyWyraz( string tekst, string wyraz ) { int ileRazy = 0; for( int x = 0; x < tekst.length(); x++ ) { int y = 0; if( wyraz[ y ] == tekst[ x ] ) { for( int z = x; wyraz[ y ] == tekst[ z ]; z++ ) { wyraz[ y++ ]; if( wyraz[ y ] == 0 ) ileRazy++; } } } return ileRazy; }
int main() { string tekst, wyraz; cout << "Podaj dowolny tekst: "; getline( cin, tekst ); cout << "Jaki wyraz chcesz znalezc w tekscie: "; cin >> wyraz; cout << "slowo wystepuje w tekscie " << szukanyWyraz( tekst, wyraz ) << " razy"; getch(); }
|
|
pekfos |
» 2013-05-14 15:00:40 for( int z = x; wyraz[ y ] == tekst[ z ]; z++ ) { wyraz[ y++ ]; if( wyraz[ y ] == 0 ) ileRazy++; } |
|
NHFL Temat założony przez niniejszego użytkownika |
» 2013-05-14 16:24:33 fakt powinno być samo y++; a co do Twojego drugiego komentarza to nie rozumiem. |
|
pekfos |
» 2013-05-14 16:36:00 Nie kończysz pętli. Będzie dalej sprawdzać, aż warunek się nie spełni, lub program wysypie. |
|
Bajt |
» 2013-05-14 17:19:57 Cóż, według mnie, ten kod jest dosyć nieczytelny. Jeżeli chcesz faktycznie policzyć ile liter jest w tym wyrazie, to najlepiej użyć takiej prostej konstrukcji. Czy nie lepiej byłoby napisać to tak? unsigned int score; int Count_Strings( std::string _string1, std::string _string2 ) { for( int i = 0; i < _string1.lenght() - 1; ++i ) { if( _string1[ i ] == _string2 ) ++score; } return score;
|
|
pekfos |
» 2013-05-14 17:41:49 Idąc dalej: Nie lepiej byłoby napisać to tak? int score = std::mismatch( str1.begin(), str1.end(), str2.begin() ).first - str1.begin();
|
|
NHFL Temat założony przez niniejszego użytkownika |
» 2013-05-14 19:12:55 @Bajt Nie da sie wykonac tego rodzaju porównania w dev c++ if( _string1[ i ] == _string2 ) pozatym powinno być .length() a nie .lenght() widać nie kompilowałeś tego programu jeszcze dodam że nazwy typów nie powinny zaczynać się od '_' choć nie jest to sygnalizowane jako błąd ;) @pekfos pewnie to śmiałe posunięcie ale uważam że sie mylisz otóż pętla się kończy gdyż gdy warunek jest spełniony if( wyraz[ y ] == 0 ) ileRazy++ to po tym wraca do pętli podnosi z++ i sprawdza warunek wyraz[ y ] == tekst[ z ] który już nie jest spełniony gdyz aktualnie w wyraz[y] jest 0 a to nie jest równe tekst[x] gdyż jest tam jakaś litera a raczej liczba(kod ASCII) na pewno różna od zera |
|
Bajt |
» 2013-05-14 20:05:06 Co do tego co napisałeś to odpowiadam: 1. Rzeczywiście nie skompilowałem tego kodu. Dobry programista nie potrzebuje komputera do obmyślenia architektury programu. Sam tworzy go w głowie, więc jeśli w kodzie jest literówka to tylko dlatego, że spieszylem się pisząc go do posta. 2. Skoro dev c++ nie obsluguje języka programowania c++, to jaki z niego użytek? 3. Nie ma czegoś takiego jak nazewnictwo typów, tak jak napisałeś u góry. Nazewnictwo typów mozna zmienić za pomocą konstrukcji #typedef. Chyba chodziło ci o nazewnictwo zmiennych. Skoro tak to wiedz, że sam wiem jak nazywać zmienne. I sam wiem jakie ich nazwy są dozwolone. Dla twojej wiadomości, swego czasu popularne było zaczynanie nazw zmiennych od dolnego podkreslenia. Więc to, jak nazywam zmienne to moja sprawa. |
|
« 1 » 2 |