Литералы, поиск чисел с целой и дробной частью - 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.
- Программа завершается.