Lecția 3 din 11 6 minute

Citirea datelor: șablonul

La pbinfo, numerele pot veni pe un rând sau pe mai multe. Ca să nu-ți mai pese, citești tot textul o dată și îl tai în bucăți. Apoi iei bucățile pe rând, cu un «deget» (k).

Șablonul, rând cu rând

Console.In.ReadToEnd() citește TOT ce s-a scris, ca un singur text.

.Split(sep, ...) taie textul în bucăți, oriunde găsește spațiu, rând nou sau tab. RemoveEmptyEntries aruncă bucățile goale.

t e vectorul de bucăți (texte). k arată la ce bucată am ajuns.

int.Parse(t[k++]) transformă bucata în număr și mută degetul mai departe.

exemplu C#
char[] sep = { ' ', '\n', '\r', '\t' };
string[] t = Console.In.ReadToEnd().Split(sep, StringSplitOptions.RemoveEmptyEntries);
int k = 0;
int n = int.Parse(t[k++]);
int[] v = new int[n];
for (int i = 0; i < n; i++)
    v[i] = int.Parse(t[k++]);

De ce nu ReadLine?

Console.ReadLine() citește un rând întreg. Dacă pe rând scrie 3 5, primești textul "3 5" și int.Parse("3 5") crapă.

Cu șablonul nu contează cum sunt așezate numerele: merge mereu.

Pontt[k++] = «dă-mi bucata k, apoi crește k». E ca și cum ai citi t[k] și imediat după ai face k = k + 1.
Scrie un input și vezi cum îl taie șablonulinteractiv
ce se scrie la tastatură
după Split: vectorul t
3t[0]7t[1]8t[2]9t[3]
k 0

Observă: nu contează pe ce rând e un număr. Rândurile noi sunt tot separatori, ca spațiile.

De ținut minte
  • Copiază șablonul la fiecare problemă.
  • Fiecare număr se ia cu t[k++].
  • Mărimea vectorului e n: new int[n].
Mini-quizÎntrebarea 1 din 2

Inputul are 3 pe primul rând și 7 8 9 pe al doilea. După int n = int.Parse(t[k++]);, cât e k?

Unde folosești lecția asta