Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Parsare  (Citit de 4083 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
tzipleatud
De-al casei
***

Karma: 104
Deconectat Deconectat

Mesaje: 117



Vezi Profilul
« : Februarie 25, 2012, 19:19:38 »

Buna! As avea nevoie de un exemplu de parsare pe mai multe linii, preferabil cu streamuri, daca nu, cu <cstdio>.(De ex citirea muchiilor unui graf). Multumesc anticipat si scuze daca nu m-am exprimat cum trebuie! Smile
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #1 : Februarie 25, 2012, 22:05:00 »

Ai in urmatoarele surse exemplu de parsare in C respectiv C++ (prima e cu fread si a doua cu f.read). Ca sa le folosesti (dupa cum poti vedea in surse), trebuie sa faci define-ul ala (poti sa nu-l folosesti, doar ca trebuie inlocuit), trebuie sa definesti acel hg (cate caractere sa citeasca odata, cu tot cu spatiu si end-lineuri), poz care ne spune pozitia in care suntem (in acel sir) la un moment dat, si charul ch in care tinem sirul care urmeaza sa fie modificat.
Cod:
 // problema sortare, arhiva educationala, varianta C
# include <algorithm>
# include <cstdio>
using namespace std;

# define verf ++poz == hg ? fread ( ch, 1, hg, stdin ), poz = 0 : 0

const char *FIN = "algsort.in", *FOU = "algsort.out";
const int MAX = 500001, hg = 1 << 13;

int N, poz, A[MAX];
char ch[hg];

inline void cit ( int &x ) {
    if ( ch[0] == '\0' ) fread ( ch, 1, hg, stdin ) ;
    else for ( ; ch[poz] < '0' || ch[poz] > '9' ; verf ) ;
    for ( x = 0 ; ch[poz] >= '0' && ch[poz] <= '9' ; x = x * 10 + ch[poz] - '0', verf ) ;
}

int main (void) {
    freopen (FIN, "r", stdin);
    freopen (FOU, "w", stdout);

    cit (N);
    for (int i = 0; i < N; ++i)
        cit (A[i]);
    sort (A, A + N);
    for (int i = 0; i < N; ++i)
        printf ("%d ", A[i]);
}

Cod:
// problema sortare, arhiva educationala, varianta C++
# include <algorithm>
# include <fstream>
using namespace std;

# define verf ++poz == hg ? f.read (ch, hg), poz = 0 : 0

const char *FIN = "algsort.in", *FOU = "algsort.out";
const int MAX = 500001, hg = 1 << 13;

ifstream f (FIN);
ofstream g (FOU);

int N, poz, A[MAX];
char ch[hg];

inline void cit ( int &x ) {
    if (ch[0] == '\0') f.read (ch, hg) ;
    else for (; ch[poz] < '0' || ch[poz] > '9' ; verf) ;
    for (x = 0 ; ch[poz] >= '0' && ch[poz] <= '9' ; x = x * 10 + ch[poz] - '0', verf) ;
}

int main (void) {
    cit (N);
    for (int i = 0; i < N; ++i)
        cit (A[i]);
    sort (A, A + N);
    for (int i = 0; i < N; ++i)
        g << A[i] << " ";
}

Memorat
tzipleatud
De-al casei
***

Karma: 104
Deconectat Deconectat

Mesaje: 117



Vezi Profilul
« Răspunde #2 : Februarie 26, 2012, 09:12:23 »

Multumesc mult!  Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines