Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

koverzija (const char*) --> (vector <vector <char> >)

[es] :: C/C++ programiranje :: C/C++ za početnike :: koverzija (const char*) --> (vector <vector <char> >)

[ Pregleda: 2996 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

xeron
Sarajevo

Član broj: 25909
Poruke: 133
*.PPPoE-6044.sa.bih.net.ba.



Profil

icon koverzija (const char*) --> (vector <vector <char> >)27.11.2007. u 19:38 - pre 199 meseci
Pravim jedan kalkulator za matrice, unos matrica se vrsi preko TextInputa(FLTK2 GUI). TextInput vraca
const char*, a za racunanje mi je potreban 2d niz. Na prvi pogled ova konverzija mi se ucinla jednostavnom, ali imam problem i nikako ne mogu da pronađem grešku.
Code:

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;

int main(void){
    const char niz []={'1','2','3','\n',
                       '4','5','6','\n',
                       '7','8','9'};
    vector <vector <char> >v;
    
    //ispis niza
    for(int i=0;i<strlen(niz);i++){
        cout<<niz[i];
        }
    cout<<endl;
    
    //koverzija char[] -> vector <vector <char> >
    int red=0;
    for(int i=0;i<strlen(niz);i++){
        if(niz[i]=='\n'){ ++red; }
        v[red].push_back(niz[i]);
    }
    
    //ispis konvertovanog
    for(int i=0; i<v.size();i++)
        for(int j=0; j<v[0].size();j++)
            cout<<v[i][j];
    cout<<endl;
    
    system("pause");
    return 0;
}

Znaci na ulazu imam niz(const char*) "123\n456\n789" potrebno mi je da ga konvertujem u
123
456
789
2d niz.
if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!n");
exit(42);
}
 
Odgovor na temu

Black3maj
Beograd

Član broj: 113924
Poruke: 59
*.adsl.beotel.net.



Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)27.11.2007. u 20:37 - pre 199 meseci
Code:

for(int i=0;i<strlen(niz);i++)
{
        if(niz[i]=='\n')
            ++red; 
        else
        v[red].push_back(niz[i]);
   }


probaj ovako u tvom kodu ti ubacujes i '\ n'
 
Odgovor na temu

Nemanja.Ciric
web dizajner/programer, Niteoweb
Novi Sad/Subotica

Član broj: 163398
Poruke: 63
*.adsl.beotel.net.

Jabber: serj.cobain@gmail.com


Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)27.11.2007. u 20:50 - pre 199 meseci
Kolega kaže da praviš grešku u radu sa vektorima. Ti radiš PUSH kada ubacuješ element u vektor, no ne radiš PUSH kada ubacuješ novi vektor u vektor vektora. Dakle PRE nego što ćeš preći u novi red, moraš da uradiš PUSH (inače dodaješ elemente u vektor koji ne postoji).
NĆirić
 
Odgovor na temu

xeron
Sarajevo

Član broj: 25909
Poruke: 133
89.146.190.*



Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)27.11.2007. u 22:46 - pre 199 meseci
Citat:
Black3maj:
Code:

for(int i=0;i<strlen(niz);i++)
{
        if(niz[i]=='\n')
            ++red; 
        else
        v[red].push_back(niz[i]);
   }


probaj ovako u tvom kodu ti ubacujes i '\ n'


Ne vidim razliku, samo sto u mom primjeru else nije eksplicitno navedeno ali se podrazumjeva.
if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!n");
exit(42);
}
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
212.200.234.*

ICQ: 208550327


+14 Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)28.11.2007. u 01:28 - pre 199 meseci
Evo resenja... Terminaciju stringa sam koristio:
1. Da se u prvom ispisivanju stringa ne bi ispisivali 'funny' karakteri
2. Zbog provere uslova kraja stringa

Code:


#include <vector>
#include <iostream>
#include <cstring>

using namespace std;

void main()
{
    const char niz []={'1','2','3','\n',
                       '4','5','6','\n',
                       '7','8','9','\0'}; // uvek terminiraj string!

    vector <vector <char> >v;

    for(int i=0;i<strlen(niz);i++)
    {
        cout<<niz[i];
    }
    cout<<endl;


    int red = 0;

    // ovo 'prirodno' posmatramo kao jedan red
    vector<char> n;

    for(int i=0;i<strlen(niz) + 1;i++) // '+ 1' zbog donjeg uslova ( niz[i] == '\0' ) jer strlen(niz) 'ne dostize' null karakter
    {
        n.push_back(niz[i]);

        if(niz[i] == '\n' || niz[i] == '\0')
        {
            v.push_back(n);
            n.clear(); // brisemo prosli red da bi ga popunjavali novim podacima
        }
    }

    //ispis konvertovanog
    for(int i=0; i<v.size();i++)
        for(int j=0; j<v[0].size();j++)
            cout<<v[i][j];
    cout<<endl;

        
}


EOF
 
Odgovor na temu

xeron
Sarajevo

Član broj: 25909
Poruke: 133
89.146.177.*



Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)28.11.2007. u 11:59 - pre 199 meseci
Hvala na odgovoru ! Evo kako izgleda i moje rjesenje:
Code:

//koverzija char[] -> vector <vector <char> >
    v.push_back(vector <char>());
    for(int i=0;i<strlen(niz);i++){
        if(niz[i]=='\n'){
            v.push_back(vector <char>());
        }
        v.back().push_back(niz[i]);
    }

if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!n");
exit(42);
}
 
Odgovor na temu

Nemanja.Ciric
web dizajner/programer, Niteoweb
Novi Sad/Subotica

Član broj: 163398
Poruke: 63
*.ns.ac.yu.

Jabber: serj.cobain@gmail.com


Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)28.11.2007. u 15:17 - pre 199 meseci
Upravo to sam i rekao :) obojica ste u ispravnoj verziji koristila DVA push-a: jedan da ubacite novi vektor u vektor vektora, i jedan da ubacite novi element u novostvoreni vektor karaktera.

Samo bih ispravio zadnji kod koji si postavio:

Code:
//koverzija char[] -> vector <vector <char> >
    v.push_back(vector <char>());
    for(int i=0;i<strlen(niz);i++){
        if(niz[i]=='\n'){
            v.push_back(vector <char>());
        } else {
        v.back().push_back(niz[i]);
        };
    }


Poenta dodavanja ELSE bloka je to što predpostavljam da želiš čiste brojeve, tako da ti /n ne treba u rezultantnom vektoru vektora a tvoje rešenje govori da je jedina razlika između broja i znaka za novi red, to što ćeš kod '\n' prethodno push-ovati novi vektor u vektor vektora. Znači ovaj kod kao rezultat daje:
Code:

123
\n456
\n789


a moja ispravka ne upisuje nepotrebne karaktere... Što si pravio vektor vektora karaktera? Što ne celih ili realnih brojeva ako već radiš sa njima? mislim da samo treba "vector<char>" da zameniš sa "<vector double>" da se konverzija karakter-broj radi automatski (ad-hok polimorfizam).

[Ovu poruku je menjao Nemanja.Ciric dana 28.11.2007. u 16:27 GMT+1]
NĆirić
 
Odgovor na temu

xeron
Sarajevo

Član broj: 25909
Poruke: 133
*.PPPoE-6469.sa.bih.net.ba.



Profil

icon Re: koverzija (const char*) --> (vector <vector <char> >)28.11.2007. u 15:50 - pre 199 meseci
Hvala na ispravkama, sad sve radi bas onako kako bi trebalo.
if (argc > 1 && strcmp(argv[1], "-advice") == 0) {
printf("Don't Panic!n");
exit(42);
}
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: koverzija (const char*) --> (vector <vector <char> >)

[ Pregleda: 2996 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.