我正在嘗試編寫一個函數,在C++數組中刪除一個元素,即將每個元素都從左側開始,從索引處開始。將C++數組中的每個元素移動到左邊
代碼
#include <iostream>
using namespace std;
const int MAX_SIZE = 50;
void fill_array(char array[], int ¤t_size, const int max_size);
void print_array(const char array[], const int current_size);
int delete_index(char array[], int ¤t_size, int index);
int main() {
char array[MAX_SIZE] = {' '};
int current_size = 0;
fill_array(array, current_size, MAX_SIZE);
int index = 4;
delete_index(array, current_size, index);
cout << "After deleting element at index " << index << " the array is: ";
print_array(array, current_size);
return 0;
}
int delete_index(char array[], int ¤t_size, int index) {
// Check input
if (index > current_size) {
cout << "Index must be between 0 and " << current_size - 1 << endl;
return -1;
}
for (int i = index; i < current_size; i++) {
cout << "array[" << index << "] = " << index << endl;
array[index] = array[index + 1];
}
current_size--;
cout << current_size << endl;
return 0;
}
但是,輸出輸入「thisisnotworking」當我和指標4:
Please input characters for the array (max of 50) or enter '*' to quit:
onetwothree*
array[4] = 4
array[4] = 4
array[4] = 4
array[4] = 4
array[4] = 4
array[4] = 4
array[4] = 4
10
After deleting element at index 4 the array is: onetoothre
我不明白它是不是增加了指數在對循環。
我在這裏和其他地方讀過類似的問題,但仍然無法解決問題。任何想法爲什麼這是?
注:我只想使用數組(而不是向量等)。
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
不!假設尺寸是10;所以array [9] = array [9 + 1] = array [10]:array [10]不是數組的元素。所以你正在分配垃圾值。要解決這個問題,你應該考慮到邊界問題。大小 - 只是循環打印的技巧。但真正的大小是一個數組常量。 10是10 – Raindrop7
感謝您的回答,我會看看您通過的資源。我沒有包括其餘的功能,因爲它們是不言自明的,我不認爲它們是相關的。 – punddalinni