Это мой первый вопрос, и я очень рад быть частью сообщества.
Я был мотивирован, чтобы опубликовать здесь, столкнувшись с серьезной проблемой с функцией удаления. Я пытаюсь удалить с помощью ключевых слов индекса и подсчета, я пытаюсь удалить полосы элементов из массивов. Я выписал разные сценарии на бумаге, но не нашел заметной картины, поэтому я должен спросить здесь.
Скажем, у вас есть char array[] = {'A','B','C','D','E'};
Моя функция remove имеет этот прототип void remove(char arr[], int& size, int element, int count)
Если нужно написать, с объявленным размером, remove(array, size, 2, 2)
затем напечатайте массив, чтобы напечатать ABE. Функция должна перейти к индексу 2, затем удалить два элемента, а затем переместить остальные.
Вот функция, которую я пытался реализовать:
void remove(char arr[], int& size, int element, int count) {
for (int i = element; i < count; i++) {
arr[element] = arr[element + 1];
}
size = size - count; }
Я мог бы написать эту функцию, чтобы она соответствовала конкретным тестовым случаям, но я не могу обобщить ее для работы на всех разных входах. Я довольно уверен, что size = size - count;
правильна, поскольку она последовательно "удаляет" правильное количество элементов с конца, но я не уверен на 100%.
Как я могу реализовать эту функцию правильно? Я вижу, что другие задавали подобные вопросы, но не для того, чтобы удалять потенциально несколько элементов за раз. У меня также есть нулевое знание векторов, и я не думаю, что использование их будет работать для остальной части моей программы.
Вы можете использовать std::rotate
следующим образом:
void remove(char arr[], int& size, int element, int count) {
std::rotate(arr + element, arr + element + count, arr + size);
size = size - count;
}
Редактировать:
Добавление запрошенных чеков:
void remove(char arr[], int& size, int element, int count) {
if(element < size) {
if(count + element > size) count = size - element;
std::rotate(arr + element, arr + element + count, arr + size);
size = size - count;
}
}
Вам просто нужно несколько простых изменений, переместите элементы счетчика элементов вперед в текущее с помощью arr[element] = arr[element + count];
, Также измените цикл for, чтобы подсчитать до size - count
.
char arr[] = {'a','b','c'};
и remove(arr, size, 2, 23);
введен, массив все еще должен быть ab. Должен ли я поставить if / else там, чтобы предотвратить стирание целиком? Если так, то как бы это выглядело?