Найти минимальное вещественное число в строке

нужно сделать код, который находил в любой введенной строке минимальное вещественное число. без вектора, только массив и библиотека string.h/string.
помогите, пожалуйста

Так а сами почему не пробуете что-то сделать или хоть начать делать?)

если бы я знала как начать, то, вероятно, не задавала бы вопрос на форуме.

Например, с ввода строки.
gets, …
gets - C++ Reference

И тут еще надо определиться что в строке-то должно быть, например, числа разделенные пробелом или что.

#include <iostream>
#include <string>
    using namespace std;
    int main()
    {
        setlocale(0, "");
        string str;
        int i;
        cout << "Введите строку: ";
        getline(cin, str);
        int lenOfText = str.size();
        for (i = 0; i < lenOfText; i++)
        {
            string number;

            if (str[i] >= '0' && str[i] <= '9')
            {
                do
                {
                    number += str[i];
                    i++;
                } while (str[i] >= '0' && int(str[i]) <= '9' && i < lenOfText || str[i] == '.');
                cout << number << endl;
            }
        }
        return 0;

}

эта программа пытается просто вывести все числа, которые видит. но не может игнорировать то, что числом не является (например, введенное 6.7.8)

вводиться может абсолютно что угодно (gnjfinid56958g g gjiroe54655e…657.53 66 - что-то вроде такого - тоже). нужно как раз найти числа (в том числе отрицательные и вещественные) и найти максимальное из них.

Надо тогда еще определиться что считать числом.
Например, это вполне может считаться корректными числами:

  • 1e+12
  • .2

Еще разные разделители дробной части (а еще бывают и для тысячей, 1 000), отрицательные числа, другие системы счисления (0xFF).

И в том же “6.7.8” какие числа получиться должны?

Для простых случаев (типа только числа вида 123 и 12.3) можно делать аналогично как для разделения строки на слова.
В цикле идти по символам, смотреть цифра или нет, реагировать на начало (цифра после не цифры) и конец числа и т.д. То есть при начале числа создать пустую строку и писать в нее пока не конец числа (или пока число корректно).
Рисование схемы конечного автомата может помочь.

atof для конвертации строки в число.

#include <iostream>
#include <string>
using namespace std;
int main()
{
    setlocale(0, "");
    string str;
    int i;
    cout << "Введите строку: ";
    getline(cin, str);
    int lenOfText = str.size();
    int n = 0;
    double* array = new double[n];
    int j = 0;
    for (i = 0; i < lenOfText; i++)
    {
        string number;


        if (str[i] >= '0' && str[i] <= '9' || str[i] == '-')
        {
            do
            {
                number += str[i];
                i++;
            } while (str[i] >= '0' && int(str[i]) <= '9' && i < lenOfText || str[i] == ',' || str[i] == '.');
            if (number != "-")
            {
                double d = atof(number.c_str());
                *(array + j) = d;
                j++;

            }
            number = ' ';

        }
    }

        if (j != 0)
        {
            for (int y = 0; y < j; y++)
                cout << *(array + y) << " ";
            double min = *(array + 0);
            for (int y = 0; y < j; y++)
            {
                if (*(array + j) < min)
                    min = *(array + j);
            }
            cout << "минимальное: " << min << " ";
            return 0;
        }
}

есть это. но оно выдает мне ошибку “файл_нейм вызвал срабатывание точки останова” в вижуал студио 19 года, но работает в онлайн компиляторе.

Видимо дело в попытке записывать в массив под 0 элементов.

Если нужен динамический массив и нельзя С++ std::vector, то тогда ж надо свой аналог завелосипедить ) Перевыделять память, копировать текущие элементы в новый массив и т.д.

Но тут массив же не особо нужен, достаточно хранить текущее минимальное и сравнивать с каждым новым числом.