Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 27. Wyszukiwanie frazy w tekście

Ostatnio zmodyfikowano 2023-07-04 23:39
Autor Wiadomość
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.
C/C++
#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.
C/C++
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ść?
P-180169
pekfos
» 2023-07-04 23:39:33
C/C++
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 &&.
P-180170
« 1 »
  Strona 1 z 1