Domanda

Sono un nuovo alla C, ma ho bloccato con subj. Posso dividere stringa con strtok, ma non so come ottenere un token casuale.

Grazie.

È stato utile?

Soluzione

È possibile analizzare due volte, quindi ottenere un numero casuale e sceglierne uno, che si raccolgono durante il secondo passaggio della stessa stringa.

In alternativa, si può fare in un unico passaggio, se si utilizza serbatoio di campionamento .

Mastering campionamento serbatoio sarà un modo molto utile per imparare C come un lato per l'apprendimento della matematica! :)

Altri suggerimenti

Il seguente pseudocodice illustrato come restituire un candidato uniformemente selezionato tra i segni della stringa:

string result = null;
int tokens = 0;
while (true) {
  string candidate = next token;
  if (candidate does not exist) break;
  tokens = tokens + 1;
  if ((a random integer selected between 0 and tokens-1) == 0) result = token;
}
return result;

Questo è un caso particolare di Algoritmo R dalla sezione 3.4.2 del volume II di Knuth The Art of Computer Programming .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top