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

Rozdział 32 Dwa pytania i zadanie domowe

Ostatnio zmodyfikowano 2023-07-31 00:36
Autor Wiadomość
J_Cop
Temat założony przez niniejszego użytkownika
Rozdział 32 Dwa pytania i zadanie domowe
» 2023-07-31 00:18:53
Witam.
To mój pierwszy post na forum. Od jakiegoś czasu "przerabiam" sobie kurs, doszedłem do lekcji 32.

Mam kilka pytań:
- po co w tym fragmencie jest c_str()?
C/C++
std::ifstream plik;
plik.open( sNazwaPliku.c_str() );
if( !plik.good() )
   
 return false;
Jak to usunę, to działanie programu jest to samo. Wiem, było to wyjaśnione w jakimś stopniu w jednym z wcześniejszych rozdziałów, ale cały czas nie rozumiem użycia (lub nie) tego. Czy to jest właśnie sytuacja, kiedy użycie tego jest "sztuką dla sztuki"?

- czy dobrze rozumiem, że ten program wyszukuje nie szukane słowo, ale szukany ciąg znaków? Chodzi mi o to, że jeśli szukanym słowem będzie "do" to program wypisze wiersze, w których znajdować się będzie na przykład słowo "doskonaly", bo zawiera ciąg znaków "do". I tu pytanie czy posiadając dotychczasową wiedzę z kursu jestem w stanie napisać program, który wyszuka pełne słowo, a nie ciąg znaków, który może być częścią innego słowa?

Mój program z zadania domowego, mogę prosić o przyjrzenie mu się i ewentualne uwagi? Wydaje się, że działa poprawnie:

C/C++
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

bool wypiszWiersze( string sNazwaPliku, string slowo )
{
   
ifstream plik;
   
plik.open( sNazwaPliku );
   
if( !plik.good() )
       
 return false;
   
   
string wiersz;
   
while( getline( plik, wiersz ) )
   
{
       
size_t znalezionaPozycja = wiersz.find( slowo );
       
if( znalezionaPozycja != string::npos )
           
 cout << endl << wiersz << endl;
       
   
}
   
plik.close();
   
return true;
}

int main()
{
   
string nazwaPliku, slowo;
   
cout << "Podaj nazwe pliku: ";
   
cin >> nazwaPliku;
   
cout << "Podaj szukane slowo: ";
   
cin >> slowo;
   
if( !wypiszWiersze( nazwaPliku, slowo ) )
       
 cout << "Nie udalo sie otworzyc pliku o podanej nazwie." << endl;
   
   
return 0;
}
P-180198
pekfos
» 2023-07-31 00:36:47
po co w tym fragmencie jest c_str()? Jak to usunę, to działanie programu jest to samo.
Obie formy działają w C++11 lub nowszym. W starszej wersji standardu C++ trzeba było używać c_str(), bo open() oczekiwało łańcucha znaków w stylu C.

- czy dobrze rozumiem, że ten program wyszukuje nie szukane słowo, ale szukany ciąg znaków? Chodzi mi o to, że jeśli szukanym słowem będzie "do" to program wypisze wiersze, w których znajdować się będzie na przykład słowo "doskonaly", bo zawiera ciąg znaków "do". I tu pytanie czy posiadając dotychczasową wiedzę z kursu jestem w stanie napisać program, który wyszuka pełne słowo, a nie ciąg znaków, który może być częścią innego słowa?
Dobrze rozumiesz. Co do szukania konkretnego słowa, sądzę że wiedzy wystarczy, chociaż co dokładnie musisz wiedzieć mocno zależy od podejścia do problemu.

Kod zadania wygląda dobrze.
P-180201
« 1 »
  Strona 1 z 1