нужно сделать код, который находил в любой введенной строке минимальное вещественное число. без вектора, только массив и библиотека 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
, то тогда ж надо свой аналог завелосипедить ) Перевыделять память, копировать текущие элементы в новый массив и т.д.
Но тут массив же не особо нужен, достаточно хранить текущее минимальное и сравнивать с каждым новым числом.