Для этой программы у меня есть три файла данных. Первый имеет список чисел, второй - список чисел с командой add (A) или delete (D). Я должен поместить числа из первого файла в третий файл, а затем обновить окончательный файл на основе команд и чисел во втором файле. Третий файл не имеет дубликатов и должен быть отсортирован, пока значения вставлены. Вот функции, которые у меня есть, мне трудно получить элементы, хранящиеся в массиве без дубликатов. Массив должен быть статически, я сделал #define max size 2000, которого более чем достаточно для обработки нужных мне чисел. Спасибо! Если я должен загрузить главную, дайте мне знать, но я уверен, что проблема заключается в одной из этих функций.Вставка значения в отсортированный массив без дубликатов: C++
int search(int value, int list[], int n) // returns index, n is logical size of array
{
int index = -1;
for(int i = 0; i < n; i++)
{
if(value == list[i])
{
index = i;
return index;
}
}
return index;
}
void storeValue(int value, int list[], int& n)
{
int i = n;
for(; i > 0 && list[i - 1] < value; i--)
{
list[i] = list[i - 1];
}
list[i] = value;
n++;
}
void deleteValue(int loc, int list[], int n)
{
if(loc >= 0 && loc < n)
{
for(int i = loc; i < n - 1; i++)
list[i] = list[i +1];
n--;
}
}
UPDATE: теперь дубликаты хранятся, но только для некоторых номеров. Например: мой третий файл: 1,2,8,8,9,101,101,104 и т. Д. Выход должен быть: 1,2,8,9,101,104 и т. Д. значение: значение должно быть вставлено list []: массив изменяется (должен быть статическим) n: логический размер массива Я не могу понять, почему некоторые номера дублируются, а другие не являются В основном я запускаю функцию поиска, и если возвращается -1 (значение еще не найдено), я запускаю функцию storeValue.
Вот мои обновленные функции:
int search(int value, int list[], int n) // returns index
{
int index = -1;
for(int i = 0; i < n; i++)
{
if(value == list[i])
{
index = i;
return index;
}
}
return index;
}
void storeValue(int value, int list[], int& n)
{
int i = n;
for(; i > 0 && list[i - 1] > value; i--)
{
list[i] = list[i - 1];
}
list[i] = value;
n++;
}
void deleteValue(int loc, int list[], int& n)
{
if(loc >= 0 && loc < n)
{
for(int i = loc; i < n; i++)
{
if (i == loc)
{
list[i] = list[i + 1];
i++;
}
}
n--;
}
}
Вам нужно использовать массив? Существуют и другие структуры, которые обрабатывают уникальные элементы, такие как 'std :: map' и' std :: set'. –
Да, мне нужно использовать массив, размер которого статичен. –