Titlul: Parsare
Scris de: Tudor Tiplea din 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! :)
Titlul: Răspuns: Parsare
Scris de: Simoiu Robert din 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. // 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]); }
// 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] << " "; }
Titlul: Răspuns: Parsare
Scris de: Tudor Tiplea din Februarie 26, 2012, 09:12:23
Multumesc mult! :)
|