Rozdział 27. Wyszukiwanie frazy w tekście
Ostatnio zmodyfikowano 2023-07-04 23:39
Gawel Temat założony przez niniejszego użytkownika |
Rozdział 27. Wyszukiwanie frazy w tekście » 2023-07-04 11:00:51 Cześć, Zastanawiam się jak prawidłowo sprawdzać czy wyszukiwana przeze mnie fraza znajduje się w tekście. Mój pierwszy kod, który nie działa poprawnie. #include <iostream> #include <string>
using namespace std;
bool szukaj( string & tekst, string wyraz1, string wyraz2 ) { if(( tekst.find( wyraz1 ) ) &&( tekst.find( wyraz2 ) ) == string::npos ) return false; else return true; }
void wypiszWynik( bool czyZnaleziono ) { if( czyZnaleziono ) std::cout << "Znaleziono" << std::endl; else std::cout << "Nie znaleziono" << std::endl; }
int main() { std::string napis = "Zadanie domowe z kursu C++ (http://cpp0x.pl) - najlepszy kurs C++ w Internecie!"; wypiszWynik( szukaj( napis, "ada", "kurs" ) ); wypiszWynik( szukaj( napis, "ada", "taki" ) ); wypiszWynik( szukaj( napis, "C++", "cpp0x" ) ); wypiszWynik( szukaj( napis, "C#", "cpp0x" ) ); return 0; }
Mój drugi kod, który ma podobną budowę i działa dobrze. Różni się tylko funkcją szukaj. bool szukaj( string & tekst, string wyraz1, string wyraz2 ) { if( tekst.find( wyraz1 ) == string::npos ) return false; else if( tekst.find( wyraz2 ) == string::npos ) return false; else return true; }
Czy można w jakiś sposób poprawić pierwszą funkcję, tak by zwracała prawidłową wartość? |
|
pekfos |
» 2023-07-04 23:39:33 if(( tekst.find( wyraz1 ) ) &&( tekst.find( wyraz2 ) ) == string::npos ) Tylko drugi wynik porównujesz tu z npos. Pierwszy wynik jest traktowany wprost jako wartość logiczna, więc jest porównywany z zerem. W drugim kodzie false jest zwracane gdy dowolny wyraz nie zostanie znaleziony, więc poprawnym łącznikiem będzie ||, nie &&. |
|
« 1 » |