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

[C++] Problem z new string

Ostatnio zmodyfikowano 2011-12-31 21:15
Autor Wiadomość
CodeMeister
Temat założony przez niniejszego użytkownika
[C++] Problem z new string
» 2011-12-31 13:48:21
wiatm, mam problem z zadeklarowaniem elementów string na stercie.
mam funkcję która przeszukuje plik i drugą, która robi to samo tylko, że od tyłu. w tym celu zadeklarowałem zmienną typu string do której jest wczytywany plik txt. i chciałem ten string zadeklarować na stercie kod:
C/C++
void znajdz_pozycje()
{
    system( "cls" );
   
    int iPozycja;
    char taknie;
    string * sCo_wyszukac = new string;
    string * sSzukana_fraza = new string;
    string * sBaza = new string;
    string sLinia;
   
   
   
    fstream plik;
    plik.open( "baza.txt", ios::in );
   
    if( plik.good() == true )
    {
        cout << "Co chcesz wyszukac? (imie, nazwisko, email, numer): ";
        cin >> * sCo_wyszukac;
        cout << "Szukana fraza: ";
        cin >> * sSzukana_fraza;
        cout << endl << endl;
       
        while( !plik.eof() )
        {
            getline( plik, sLinia );
            * sBaza.append( sLinia );
            * sBaza += '\n';
        }
       
        if( sBaza.empty() == false )
        {
           
            iPozycja = * sBaza.find( sSzukana_fraza );
            if( iPozycja != string::npos )
                 cout << "Znalaziono fraze na pozycji: " << iPozycja << endl;
            else
                 cout << "Nie znaleziono szukanej frazy" << endl << endl;
           
        }
        cout << "Czy wynik jest poprawny? [T/N]:";
        cin >> taknie;
       
        switch( taknie )
        {
        case 'T':
            usun_dane_sterty();
            break;
           
        case 't':
            usun_dane_sterty();
            break;
           
        case 'N':
            znajdz_pozycje_od_tylu();
            break;
           
        case 'n':
            znajdz_pozycje_od_tylu();
            break;
        }
       
        else
             cout << "Baza jest pusta!" << endl << endl << endl;
       
        plik.close();
    }
    else
    {
        MessageBeep( 0x00000010L );
        cout << "Blad programu: nie mozna otworzyc pliku \"baza.txt\" " << endl << endl;
    }
   
    getch();
    system( "cls" );
}

void znajdz_pozycje_od_tylu()
{
    iPozycja = * sBaza.rfind( * sSzukana_fraza );
    if( iPozycja != string::npos )
         cout << "Znalaziono fraze na pozycji: " << iPozycja << endl;
    else
         cout << "Nie znaleziono szukanej frazy" << endl << endl;
   
}
usun_dane_sterty();
}

void usun_dane_sterty()
{
delete sBaza;
delete sSzukana_fraza;
delete sCo_wyszukac;
}

ten kod nie działa, wyświetla się:
In function `void znajdz_pozycje()':|
error: request for member `append' in `sBaza', which is of non-class type `std::string*'|
error: request for member `empty' in `sBaza', which is of non-class type `std::string*'|
error: request for member `find' in `sBaza', which is of non-class type `std::string*'|
expected primary-expression before "else"|
error: expected `;' before "else"|
error: expected primary-expression before "else"|
error: expected `;' before "else"|
error: a function-definition is not allowed here before '{' token|
In function `void usun_dane_sterty()':|
error: `sBaza' was not declared in this scope|error: `sSzukana_fraza' was not declared in this scope|error: `sCo_wyszukac' was not declared in this scope|
jak to poprawić?
P-46812
Mrovqa
» 2011-12-31 14:37:12
@GrzesiekR, naucz się sam naprawiać tak banalne problemy, a nie zaśmiecaj forum. Jak z każdym najmniejszym problemem będziesz przychodził na forum to ty na pewno nie zostaniesz dobrym programistą... Bo co to za programista, który nie umie pisać?

Popatrz na funkcję znajdz_pozycje_od_tylu, widać od razu, że coś tam jest nie tak... (na końcu). W funkcji usun_dane_sterty niby co usuwasz? Próbujesz usunąć coś nieistniejącego... Nawet jeśli masz problemy to najpierw staraj się samemu je usunąć, a nie prosto na forum.
P-46819
malan
» 2011-12-31 15:22:12
Poza tym, źle posługujesz się wskaźnikami.
C/C++
#include <iostream>
#include <string>

int main()
{
    std::string * str = new std::string;
   
    str->append( "string1" );
   
    std::cout << "#1 " << * str << std::endl;
   
    str->clear();
   
    str->append( "string2" );
    str->append( "string3" );
   
    std::cout << "#2 " << * str << std::endl;
   
    delete str;
}
P-46825
Mrovqa
» 2011-12-31 20:44:40
Można się jeszcze odwołać tak:
C/C++
( * sBaza ).append( sLinia );
Mimo to lepiej używać operatora
->
 :)
P-46860
CodeMeister
Temat założony przez niniejszego użytkownika
» 2011-12-31 21:15:08
Chodzilo mi o to zeby nie wczytywac dwa razy pliku i szukanej frazy
P-46867
« 1 »
  Strona 1 z 1