ANSI C: ¿Cómo dividir una cadena de salto de línea y obtener una línea al azar
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.
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 .