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

szukanie stringu w pliku...

Ostatnio zmodyfikowano 2013-07-03 15:26
Autor Wiadomość
Matix8741
Temat założony przez niniejszego użytkownika
szukanie stringu w pliku...
» 2013-07-03 14:35:39
Kiedyś, jak robiłem jeszcze podstawowy kurs c++ z tej strony to napisałem taki program
C/C++
#include <fstream>
#include <iostream>
#include <string>
#include<cstdlib>

std::string wprowadz()
{
    std::string wyraz;
    std::cin.clear();
    std::cin.sync();
    std::cout << "wprowadz szukany wyraz!  :";
    std::cin >> wyraz;
    return wyraz;
}
int main()
{
    std::string sprawdz = wprowadz();
    bool znaleziona;
    std::ifstream plik;
    std::string wiersz;
    plik.open( "c:\\cpp0x.txt" );
    if( !plik.good() )
         std::cout << "nie uda³o siê wczytywanie pliku";
    else
    {
        while( std::getline( plik, wiersz ) )
        {
            znaleziona = wiersz.find( sprawdz );
            if( znaleziona == std::string::npos )
                 continue;
           
            std::cout << wiersz << std::endl;
        }
        plik.close();
    }
    system( "pause" );
    return 0;
}
Wtedy działał, ale po jakimś czasie przestał o.O ( wiem jest to dziwne, ale nie kłamię). Dzisiaj postanowiłem go naprawić i zauważyłem, że zmienna sprawdzająca czy wyraz jest w pliku była typu
bool
, więc zmieniłem ją na
int
 i działa, ale teraz moje pytanie: Dlaczego wcześniej działało z bool-em a teraz nie ? Czy to może ja mam urojenia?
P-86896
Savail
» 2013-07-03 14:41:29
Zmienna typu bool przyjmuje tylko dwie wartości: 0 dla wartości 0 i 1 dla każdej innej wartości. Z tego co pamiętam std::string::npos ma wartość -1 a więc jeśli przypiszesz ją do zmiennej typu bool to przyjmie ona wartość true.
P-86897
Matix8741
Temat założony przez niniejszego użytkownika
» 2013-07-03 14:49:46
Nie, przyjmuje wartość maksymalnej długości obiektu klasy std::string (chyba dobrze napisałem).Wiem, że
bool
 przyjmuje 1 lub 0, ale co się dzieje z tą instrukcją warunkową ?
C/C++
znaleziona = wiersz.find( sprawdz );
if( znaleziona == std::string::npos )
     continue;

Dla mnie jest ona nie logiczna i jakaś taka dziwna, ale mimo to się kompiluje i kiedyś robiła to poprawnie, a teraz już nie xD
P-86898
DejaVu
» 2013-07-03 15:11:17
Może kiedyś po prostu źle testowałeś program ;) Wartość różna od zera jest traktowana jako prawda.
P-86899
Matix8741
Temat założony przez niniejszego użytkownika
» 2013-07-03 15:17:24
No tak, wiem. Ta jednak instrukcja warunkowa nigdy się nie spełni... czyli true jest traktowany jako wartość jeden tak ? Bo std::string::npos na pewno nie jest traktowany jako true
P-86900
Savail
» 2013-07-03 15:26:21
w momencie gdy
wiersz.find( sprawdz )
 osiąga wartość std::string::npos to wartość jaka zostanie przypisana twojej zmiennej bool będzie true. Tak jak napisałeś, ten warunek w instrukcji if rzeczywiście nigdy nie zostanie spełniony (bo 1 lub 0 nigdy nie będzie = -1...)
P-86901
« 1 »
  Strona 1 z 1