Есть ли эквивалентная функция Perl split () в C? - PullRequest
0 голосов
/ 03 июня 2009

Я пытаюсь разделить действительные числа в программе на C, используя десятичную точку в качестве разделителя, так что, скажем, 1234,56 дает

(int) whole_num = 1234 (int) фракция = 56

Есть идеи, как мне это сделать? Это было долгое время с тех пор, как я обшарил C, понимаешь? :)

Ответы [ 3 ]

4 голосов
/ 03 июня 2009

Предполагая, что вы хотите разбить строку.

strtok_r и ваша любимая функция от строки к номеру, например strtol

4 голосов
/ 03 июня 2009
void split( double num, int& whole_number, double& fraction) {
    fraction = modf(num, &whole_number);
}

Это работает, так как modf берет целую часть двойного и возвращает дробную часть.

1 голос
/ 03 июня 2009

Если вы имеете дело с фактическим числом с плавающей точкой, в отличие от строкового представления такового, вы должны использовать modf для разделения целых и дробных частей.

Perl split разделяет по регулярным выражениям, поэтому для репликации полной функциональности вам потребуется библиотека регулярных выражений. Для общего разделения строк вы можете использовать strtok, но, поскольку он изменяет строку на месте, вместо нее рекомендуется strtok_r (описано на той же странице).

...