Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz j0k3r! #775 üzenetére

    Ja bocsi, az elkerülte a figyelmem, hogy az a lényeg, hogy szavanként tárold el.
    Az sem túl nehéz, akkor meg csináld azt, hogy mondjuk sima string helyett string*-ot használsz.

    Írtam egy példát, bevallom, nem igazán néztem át, hogy helyes-e, és mivel láttam, hogy sürgős, elég gyorsan írtam, így lehetnek benne hibák, mindenesetre kipróbáltam, és működik.
    Az eredeti példa analógiájára csináltam, de kissé átalakítva.

    Így néz ki:

    // string::push_back
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;

    int main ()
    {
    ifstream file ("teszt.txt",ios::in);
    if( !file.good() ){ //Fájlpara
    cout<<"Hiba a fajllal...";
    }
    else //OK
    {
    string* words;
    const int default_size=100; //kezdetben pl. 100 méretű tömböt hozunk létre
    words=new string[default_size];

    int size=default_size; //eltároljuk az alapértelmezett (kezdő)méretet, ha kell, növelünk
    int count=0; //hol tartunk a tömbben? (egyszerűbb nyilvántartani)
    while( file.good() ) //countot majd a cikluson belül növeljük
    {
    char c=file.get();
    if(c==' ') count++; //szóközt kaptunk, növelünk, következő helyre tároljuk a szót
    if(count<default_size){ //még beleférünk
    words[count].push_back(c);
    }
    else{ //nyújtózkodunk
    //pl. duplázzuk a kezdőméretet
    string* tmp=new string[size*2]; //átmeneti változó, kétszeres kezdőmérettel
    for(int uj=0;uj<count;uj++){ //csak count-ig van értelme menni, csak addig töltöttük fel
    tmp[uj]=words[uj];
    }
    size*=2; //duplázzuk
    tmp[count].push_back(c);
    delete[] words; //töröljük az eredeti adatait
    words=tmp; //végül belemásoljuk a nyújtott mérettel
    }
    }

    for(int i=0;i<count;i++){
    cout <<"i: "<<i<<".: "<< words[i] << endl;
    }
    }
    return 0;
    }

    Sk8erPeter

Új hozzászólás Aktív témák