Существует ли эквивалент функции split() Perls в C?

StackOverflow https://stackoverflow.com/questions/944738

  •  09-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь разделить действительные числа в программе на языке Си, используя десятичную точку в качестве разделителя таким образом, чтобы, скажем, 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 (описано на той же странице) рекомендуется вместо этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top