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

[C++] Wyszukiwanie znaków HTML w tekście.

Ostatnio zmodyfikowano 2012-01-22 23:10
Autor Wiadomość
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
C/C++
#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++ ) //WAŻNE ! ROZMIAR PLIKU ZE ZNACZNIKAMI HTML (Ilosc linii)
            {
                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; // TU BEDZIE DALSZA CZESC PROGRAMU!
    else cout << "WPROWADZONY ZNACZNIK JEST NIEPRAWIDLOWY!" << endl; // JAK JEST NIEPRAWIDLOWY TO ZAMKNIE
   
    system( "Pause" );
    return 0;
}
P-46929
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
C/C++
//WAŻNE ! ROZMIAR PLIKU ZE ZNACZNIKAMI HTML (Ilosc linii)

Ilość linii wbita na sztywno? Słabe rozwiązanie..

C/C++
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.
P-46932
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
P-46937
pekfos
» 2012-01-01 19:08:19
C/C++
for( int i = 0; i < 1000; i++ )
{
    if( strcmp( data[ i ], znacznik ) == 0 )
         flaga = true;
    else flaga = false;
   
}
zmień na
C/C++
bool flaga = false;
for( int i = 0; i < 1000; i++ )
{
    if( strcmp( data[ i ], znacznik ) == 0 )
    {
        flaga = true;
        break;
    }
}
P-46939
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 ?
P-46946
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.
P-46950
DejaVu
» 2012-01-01 23:12:08
Ja bym sugerował zapoznać się z kursem C++, a konkretniej z rozdziałem » Kurs C++ » Poziom 3Wyszukiwanie frazy w tekście lekcja o ile nie musisz ograniczać się do języka C.
P-47027
pekfos
» 2012-01-02 15:03:07
Chyba nie musi skoro używa cout, fstream, string, itd.
P-47049
« 1 » 2
  Strona 1 z 2 Następna strona