выделить подстроку, задающую вещественное число с фиксированной точкой

задание: Из строки, состоящей из букв, цифр, запятых, точек, знаков + и – , выделить подстроку, задающую вещественное число с фиксированной точкой.

Не знаю, правильно ли выполняю данное задание, подскажите пожалуйста.

Например: если ввести строку: thy5.4v3f, выводит это: thy54v3f thy5.4v3fММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММММthy5.4v3f, хотя должно выдать: 5.43

#include <cstdio>
#include <conio.h>
#include <Windows.h>
#include <cstring>


using namespace std;

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char str[81];
    char str_2[81];
    cout << "введите строку: ";
    cin.getline(str, 80, '\n');
    cout << str;
    int d;
    d = strlen(str);
    for (int i = 0; i <= d; i++)
    {
        if (str[i] == '.' && isdigit(*str))
        {
                strcpy_s(str_2, str);
        }
    }
    cout << str_2 << endl;
    return 0;

}

Ответы (1 шт):

Автор решения: AR Hovsepyan

Сразу уточните, что размер строки не может быть изменен: const int d = strlen(str); Теперь нужны индексы начала и конца нужной подстроки: int first = 0, last = 0; Индекс всегда должен быть меньше размера строки, чтобы не читать завершающую ноль. И последний символ_точка, нас тоже не интересует, поэтому for (int i = 0; i < d - 1; i++) (а не i <= d).

Находим точку, проверяем является ли следующий символ цифрой. Если да, то это то что нам нужно. Проверяем по индексу first, является ли предыдущие символы цифрой? То же самое по индексу last проверяем последующие после точки символы. И используем подстроку [str[first],str[last]](я просто выведу на консоль).

for (int i = 0; i < d - 1; i++)    
    if (str[i] == '.' && isdigit(str[i + 1]))
    {
        first = i;
        last = i;
        if (i && last < d) {
            while (first && isdigit(str[first - 1]))
                --first;
        }
        while (++last < d && isdigit(str[last]));            
        while (first < last)
            cout << str[first++];  
        cout << '\n';
    }     
   



   
       
→ Ссылка