Учу С++ самостоятельно, вот решил написать программу, которая определяет, есть ли повторяющиеся цифры в числе. Чтобы усложнить себе жизнь, добавил условие "вывести каждый вид числа". Вот итоговый код.
Вопрос в том, что консоль виснет и вылетает, при вводе чисел более 5 знаков. Предполагаю, это из-за множества циклов, но может я что-то неправильно сделал с динамическими массивами. Кстати, удалить я их не могу до конца программы.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
string s;
int j = s.length();
int* nums = new int[j];
int* eq = new int[j];
int destroy(int num) //Разбивает число на цифры, записывая их в массив "nums".
{
int f = 0;
int d = 0;
string s = to_string(num);
for (int k = s.length() - 1; k >= 0; k--)
{
f = pow(10, k);
nums[d] = num / f % 10;
d++;
}
return 0;
}
int main()
{
setlocale(LC_ALL, "Russian");
int num = 0;
int x = 0;
bool b = false;
bool a = false;
cin >> num;
string s = to_string(num);
j = s.length();
destroy(num);
for (int i = 0; i <= j - 1; i++)
{
for (int l = i + 1; l <= j + 1; l++)
{
if (nums[i] == nums[l]) // Проверяет, есть ли вообще повторы цифр.
{
a = true;
for (int k = 0; k <= j + 1; k++)
{
if (nums[i] == eq[k]) // Если есть повторы, проверяет, совпадает ли повтор с уже известными.
{
b = true;
}
}
if (b == false) // Если нет совпадений с уже известными повторами, добавляет число в этот массив.
{
eq[x] = nums[i];
x++;
}
b = false;
}
}
}
if (a == true) // Подтверждение, что есть повторы.
{
cout << "В этом числе повторяются цифры: " << endl;
for (int i = 0; i <= x - 1; i++)
{
cout << eq[i] << " ";
}
}
}
"Динамичность" Ваших массивов сильно преувеличена. Как Вы думаете, чему здесь равно j
?
string s;
int j = s.length();
int* nums = new int[j];
int* eq = new int[j];
В этом месте (new int[j]
) j
равно нулю. Вы пишете за границы этих массивов. Перенесите выделение памяти в то место, где уже известна длина введеной строки.
Теперь Вы понимаете, почему
виснет и вылетает, при вводе чисел более 5 знаков
Присваивая значения элементам массивов, Вы портите память.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть пример который компилируется
у меня все работает хорошо, но в arr[0] где то присваивается 0Поэтому я пишу в PrintArray int i = 1