Shelboy Temat założony przez niniejszego użytkownika |
[C++] Wyszukiwanie znaków HTML w tekście. » 2012-01-01 18:34:44 Witam. Mam napisać program który wyszuka w pliku tekstowym podany przez użytkownika znacznik html. Pierwszą rzeczą jest sprawdzenie czy taki znacznik wogóle istnieje, wszystkie poprawne umieściłem w pliku "baza.txt". Zależy mi na tej pierwszej części programu (sprawdzenie poprawności) żeby to dobrze działało. Próbowałem to jakoś napisać różnymi metodami, ale nigdy nie działało do końca -tzn. podając z klawiatury np "c" wypisywało ze znacznik jest prawidłowy, bo "c" występuje np. w "<center>"... I tutaj właśnie mam problem, poradzono mi aby skorzystać z funkcji strcmp(). Czy mógłby mi ktoś poprawić ten kod? Cały czas wypisuje ze znacznik jest błędny: Plik baza.txt: http://www46.zippyshare.com/v/56996693/file.html#include <string> #include <iostream> #include <fstream>
using namespace std;
int main() { string a, wiersz; char znacznik[ 30 ]; char data[ 1000 ][ 1000 ]; bool flaga; int znak = 0; ifstream baza; baza.open( "baza.txt" ); if( baza.good() == true ) { if( !baza.eof() ) { getline( baza, wiersz ); a = wiersz; for( int k = 0; k <= 1000; k++ ) { baza.getline( data[ k ], 30 ); } cout << "Podaj znacznik: "; cin >> znacznik; for( int i = 0; i < 1000; i++ ) { if( strcmp( data[ i ], znacznik ) == 0 ) flaga = true; else flaga = false; } } } if( flaga ) cout << "OK - TUTAJ BEDA DALSZE INSTRUKCJE" << endl; else cout << "WPROWADZONY ZNACZNIK JEST NIEPRAWIDLOWY!" << endl; system( "Pause" ); return 0; } |
|
pekfos |
» 2012-01-01 18:40:11 Pierwszą rzeczą jest sprawdzenie czy taki znacznik wogóle istnieje, wszystkie poprawne umieściłem w pliku "baza.txt" |
nawet te z HTML5? :P Ilość linii wbita na sztywno? Słabe rozwiązanie.. for( int i = 0; i < 1000; i++ ) { if( strcmp( data[ i ], znacznik ) == 0 ) flaga = true; else flaga = false; } Jeśli wpisany tag nie będzie miał nr 999 na liście, to będzie false mimo iż jest poprawny :P Czegoś tu brakuje. |
|
Shelboy Temat założony przez niniejszego użytkownika |
» 2012-01-01 19:03:49 Może się nie zrozumieliśmy. Puki co, niech sprawdza spośród tych które są zawarte w pliku "baza.txt". Bazę zawsze można poprawić/zedytować :D Takie było moje rozumowanie.
Zdaje sobie sprawę, że na podawanie rozmiaru na sztywno to nie jest dobre rozwiązanie i tam dalej we warunku "czegoś brakuje", ale C++'a na takim poziomie jeszcze nie znam a program napisać muszę (zaliczenie ;E). Jeżeli ktoś mógłby poprawić chodź trochę kod to byłbym bardzo wdzięczny :0 |
|
pekfos |
» 2012-01-01 19:08:19 for( int i = 0; i < 1000; i++ ) { if( strcmp( data[ i ], znacznik ) == 0 ) flaga = true; else flaga = false; } zmień na bool flaga = false; for( int i = 0; i < 1000; i++ ) { if( strcmp( data[ i ], znacznik ) == 0 ) { flaga = true; break; } } |
|
Shelboy Temat założony przez niniejszego użytkownika |
» 2012-01-01 19:22:43 Nic to nie zmienia, dalej otrzymuje komunikat że wprowadzony znacznik jest błędny...
Pytanie, czy odczyt kolejnych wierszy z bazy i przyrównanie do wprowadzonego przez urzytkownika znacznika jest napisane poprawnie ? |
|
pekfos |
» 2012-01-01 19:26:26 Trzymaj bazę w tablicy obiektów string i użyj operatora == jak sam nie masz pewności.
Sprawdź też czy wczytane dane są prawidłowe, np czy nie mają jakichś dodatkowych znaków. |
|
DejaVu |
» 2012-01-01 23:12:08 Ja bym sugerował zapoznać się z kursem C++, a konkretniej z rozdziałem Wyszukiwanie frazy w tekście o ile nie musisz ograniczać się do języka C. |
|
pekfos |
» 2012-01-02 15:03:07 Chyba nie musi skoro używa cout, fstream, string, itd. |
|
« 1 » 2 |