求助:静态二维数组指定元素删除的简易C++代码实现
静态二维数组删除指定元素的修正方案
嘿,别担心问题显得粗浅,刚开始接触数组操作时遇到这类困惑太正常啦!我看了你的代码和需求,现在帮你修正问题,实现你想要的删除后元素移位效果。
你的代码存在的核心问题
- 输入类型错误:你用
char接收位置输入,但输入的数字字符(比如'0')对应的ASCII值是48,直接用它作为循环起始下标会完全偏离正确位置,需要转换成整数。 - 移位逻辑不完整:你只处理了当前行内的元素左移,但没考虑当前行末尾要承接下一行的第一个元素,也没处理下一行的元素整体左移,这就是没法得到期望输出的关键原因。
修正后的完整代码
#include<iostream> #include<string> // 定义静态二维数组,第三行作为预留空间 std::string array[3][6] = {{"a","b","c","d","e","f"}, {"g","h","i","j","k","l"}, {" "," "," "," "," "," "}}; void display(); using namespace std; int main(){ char xdelete; char ydelete; display(); cout<<"\nDelete character" <<endl; cout<<"enter position x: "; cin>>xdelete; cout<<"enter position y: "; cin>>ydelete; // 将字符输入转换为整数下标 int x_pos = xdelete - '0'; int y_pos = ydelete - '0'; // 第一步:处理当前行的元素左移 for(int y = y_pos; y < 5; y++){ // 注意是到5,因为y+1不能超过5(数组下标0-5) array[x_pos][y] = array[x_pos][y+1]; } // 第二步:如果不是最后一行,处理行之间的元素衔接 if(x_pos < 1){ // 你的有效行是0和1,所以x_pos < 1表示不是最后一行 // 把下一行的第一个元素移到当前行的最后位置 array[x_pos][5] = array[x_pos+1][0]; // 下一行的元素整体左移一位 for(int y = 0; y < 5; y++){ array[x_pos+1][y] = array[x_pos+1][y+1]; } // 下一行最后一个位置置空 array[x_pos+1][5] = " "; } display(); return 0; } // 显示数组的函数 void display(){ cout<<endl; for(int z = 0; z<6; z++){ cout<<" "<<z; } cout<<endl; for(int x = 0; x<2; x++){ cout<<x <<"|"; for(int y = 0; y<6; y++){ cout<<" " <<array[x][y] <<" "; } cout<<endl; } }
关键修改点解释
- 输入转换:用
xdelete - '0'把字符形式的数字转换成整数下标,这是处理字符输入数字的常用技巧。 - 当前行左移:循环到
y < 5,因为y+1最大是5(数组最后一个下标),避免越界。 - 行衔接处理:当删除的不是最后一行时,把下一行的第一个元素补到当前行末尾,然后下一行整体左移,最后把下一行的最后一个位置置空,这样就实现了你期望的“元素向上/向左补位”的效果。
测试输入x=0, y=1后,输出就会和你期望的一致啦:
0 1 2 3 4 5 0| a c d e f g 1| h i j k l
内容的提问来源于stack exchange,提问作者noobiee
相关产品推荐
相关产品推荐

