Существует ли эквивалент функции split() Perls в C?
Вопрос
Я пытаюсь разделить действительные числа в программе на языке Си, используя десятичную точку в качестве разделителя таким образом, чтобы, скажем, 1234,56 давало
(int) целое число = 1234 (int) дробь = 56
Есть какие-нибудь идеи, как я могу это сделать?Прошло много времени с тех пор, как я возился с Си, понимаешь?:)
Решение
void split( double num, int& whole_number, double& fraction) {
fraction = modf(num, &whole_number);
}
Это работает, поскольку modf принимает целую часть double и возвращает дробную часть.
Другие советы
Предполагая, что вы хотите разделить строку.
strtok_r
и ваша любимая функция преобразования строки в число, например strtol
Если вы имеете дело с реальным числом с плавающей запятой, в отличие от его строкового представления, вам следует использовать modf
для разделения на целые и дробные части.
Perl's split
разбивается по регулярному выражению, поэтому для репликации полной функциональности вам понадобится библиотека регулярных выражений.Для общего разделения строк вы можете использовать strtok
, но потому , что это изменяет строку на месте, strtok_r
(описано на той же странице) рекомендуется вместо этого.