Литералы, поиск чисел с целой и дробной частью - C (СИ)
Формулировка задачи:
в исходной стpоке ищутся и pаспечатываются в столбик все последовательности литеp, пpедставляющие записи целых чисел или действительных чисел в фоpмате <целая часть>.<дpобная часть>. Сами числа в фоpмате float последовательно записываются в буфеp.
Напишите ,пожалуйста, хотя бы идею, а лучше код, желательно полегче в понимании,спасибо.
Решение задачи: «Литералы, поиск чисел с целой и дробной частью»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> #include <string.h> void select_numbers(const char *s) { char buf[100]; double x; while (*s) { if (isdigit(*s)) { char *s0 = s; int floatNumber = 0; while ( isdigit(*s) || *s == '.' ) ++s; memcpy(buf, s0, s-s0); buf[s-s0] = '\0'; sscanf(buf, "%lf", &x); printf("%lf\n", x); } else ++s; } } int main() { const char *s = "abc123def3.14qqq42"; select_numbers(s); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода и строками.
- Определяем функцию select_numbers, которая принимает на вход указатель на строку.
- Создаем буфер для работы с числами, объявленный как массив символов.
- Объявляем переменную типа double для хранения чисел с плавающей точкой.
- В цикле while проходим по каждому символу входной строки.
- Проверяем, является ли текущий символ цифрой или точкой.
- Если символ является цифрой или точкой, то начинаем извлекать число из строки.
- В этом цикле перемещаем указатель на следующий символ после текущего числа.
- Копируем извлеченную подстроку в буфер buf.
- Используем функцию sscanf для преобразования строки в число с плавающей точкой и сохраняем его в переменной x.
- Выводим полученное число на экран.
- В функции main создаем указатель на строку
abc123def3.14qqq42
. - Вызываем функцию select_numbers, передавая ей в качестве аргумента указатель на строку из пункта 12.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д