Elaboratore di testi#9596

Elaboratore di testi (Editoriale)

Le parole in input vengono elaborate in sequenza, nell'ordine in cui arrivano. La parola successiva viene aggiunta alla riga corrente se la lunghezza totale delle parole in essa contenute, inclusa quella da aggiungere, non supera . In caso contrario, la riga corrente viene terminata e la parola viene stampata a partire da una nuova riga.

Implementazione dell'algoritmo

Leggiamo le parole in input in un array .

char s[100];

Leggiamo i dati in input.

scanf("%d %d", &n, &k);

La variabile memorizza la lunghezza corrente della riga da stampare.

ptr = 0;

Leggiamo in sequenza parole.

while (n--)
{

Leggiamo la parola successiva e ne troviamo la lunghezza .

  scanf("%s", s);
  len = strlen(s);

Se ptr + len \le k, allora la parola può essere stampata nella riga corrente. La lunghezza della riga stampata non supererà caratteri.

  if (ptr + len <= k)
  {
    ptr += len;
    printf("%s ", s);
  }

Altrimenti la parola deve essere stampata su una nuova riga. Poniamo la lunghezza della nuova riga uguale a .

  else
  {
    ptr = len;
    printf("\n%s ", s);
  }
}

Implementazione dell'algoritmo – string

Leggiamo i dati in input.

cin >> n >> k;

La variabile memorizza la lunghezza corrente della riga da stampare.

ptr = 0;

Leggiamo in sequenza parole.

while (n--)
{

Leggiamo la parola successiva e ne troviamo la lunghezza .

  cin >> s;
  len = s.size();

Se ptr + len \le k, allora la parola può essere stampata nella riga corrente. La lunghezza della riga stampata non supererà caratteri.

  if (ptr + len <= k)
  {
    ptr += len;
    cout << s << " ";
  }

Altrimenti la parola deve essere stampata su una nuova riga. Poniamo la lunghezza della nuova riga uguale a .

  else
  {
    ptr = len;
    cout << endl << s << " ";
  }
}

Implementazione Python

Leggiamo i dati in input.

n, k = map(int, input().split())
s = input().split()

La variabile memorizza la lunghezza corrente della riga da stampare.

ptr = 0

Scorriamo le parole nella lista .

for w in s:

Calcoliamo la lunghezza della parola .

  lw = len(w)

Se ptr + lw \le k, allora la parola può essere stampata nella riga corrente. La lunghezza della riga stampata non supererà caratteri.

  if ptr + lw <= k:
    ptr += lw
    print(w, end=" ")

Altrimenti la parola deve essere stampata su una nuova riga. Poniamo la lunghezza della nuova riga uguale a .

  else:
    ptr = lw
    print()
    print(w, end=" ")