Pregunta

No soy nuevo en C y quedé atrapado con subj. Puedo dividir cadena con strtok pero no saber cómo obtener una muestra aleatoria.

Gracias.

¿Fue útil?

Solución

Puede analizar dos veces, a continuación, obtener un número aleatorio y elegir uno, que recoja en la segunda pasada de la misma cadena.

O bien, puede hacerlo en un solo paso si utiliza depósito de muestreo .

El dominio de muestreo depósito será una manera muy útil de aprendizaje de C como un lado a aprender algunas de matemáticas! :)

Otros consejos

El siguiente pseudocódigo se muestra cómo devolver un candidato seleccionado de manera uniforme entre las señales de la cadena:

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 es un caso especial de algoritmo R de la sección 3.4.2 del Volumen II de de Knuth The Art of Computer Programming .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top