АНСИ С:Как разделить строку по новой строке и получить случайную строку
Вопрос
Я новичок в C и застрял в Subj.Я могу разделить строку с помощью strtok
но я не знаю, как получить случайный токен.
Спасибо.
Решение
Вы можете проанализировать его дважды, затем получить случайное число и выбрать одно, которое вы соберете при втором проходе той же строки.
Или вы можете сделать это за один проход, если используете отбор проб пласта.
Освоение отбора проб из резервуара будет очень полезным способом изучения C в качестве дополнения к изучению математики!:)
Другие советы
Следующий псевдокод показывает, как вернуть кандидата, равномерно выбранного среди токенов строки:
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;
Это частный случай Алгоритм Р из раздела 3.4.2 тома II книги Кнута Искусство компьютерного программирования.
Не связан с StackOverflow