Pergunta

Eu sou um novo no C e fiquei preso com o SUBJ. Eu posso dividir a corda com strtok Mas não sei como obter um token aleatório.

Obrigado.

Foi útil?

Solução

Você pode analisá -lo duas vezes, depois obter um número aleatório e escolher um, que você coleta na segunda passagem da mesma string.

Ou, você pode fazer isso em um único passe se usar Amostragem de reservatório.

A amostragem de reservatório de domínio será uma maneira muito útil de aprender C como um lado para aprender algumas matemáticas! :)

Outras dicas

O pseudocódigo a seguir mostra como devolver um candidato uniformemente selecionado entre os tokens da string:

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;

Este é um caso especial de Algoritmo r da seção 3.4.2 do volume II do Knuth's A arte da programação de computadores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top