C++ 试图写一个c++;堆栈程序 #包括“cstack.h” #包括 #包括 使用名称空间std; bool-isValidExpression(CStack&,char*); 内部主(空) { char表达式[21]; 表达式[0-21]=0; cout>表达; CStack stack1; if(isValidExpression(stack1,表达式)=true) { 库特

C++ 试图写一个c++;堆栈程序 #包括“cstack.h” #包括 #包括 使用名称空间std; bool-isValidExpression(CStack&,char*); 内部主(空) { char表达式[21]; 表达式[0-21]=0; cout>表达; CStack stack1; if(isValidExpression(stack1,表达式)=true) { 库特,c++,visual-c++,stack,C++,Visual C++,Stack,该语句的字面意思是访问数组的位置-21并将其设置为0。这是未定义的行为,因为21个元素的数组的位置范围为0到20(注意,21与-21一样错误)。0-21不是一个范围,而是一个生成单个值的算术运算。如果需要初始化数组,可以在定义中完成: expression[0-21]=0; 或者通过其他方式,如循环或memset(在这种情况下,数组中存储的类型是POD) 该语句的字面意思是访问数组的位置-21并将其设置为0。这是未定义的行为,因为21个元素的数组的位置范围为0到20(注意,21与-21一样错误

该语句的字面意思是访问数组的位置-21并将其设置为0。这是未定义的行为,因为21个元素的数组的位置范围为0到20(注意,21与-21一样错误)。
0-21
不是一个范围,而是一个生成单个值的算术运算。如果需要初始化数组,可以在定义中完成:

expression[0-21]=0;
或者通过其他方式,如循环或
memset
(在这种情况下,数组中存储的类型是POD)

该语句的字面意思是访问数组的位置-21并将其设置为0。这是未定义的行为,因为21个元素的数组的位置范围为0到20(注意,21与-21一样错误)。
0-21
不是一个范围,而是一个生成单个值的算术运算。如果需要初始化数组,可以在定义中完成:

expression[0-21]=0;

或者通过其他方式,如循环或
memset
(在这种情况下,数组中存储的类型是POD)

我认为您正在使问题变得比需要的更复杂,关于实现的提示:

char expression[21] = {};

我意识到给你完整的代码来复制是没有帮助的,所以你自己仔细考虑一下,祝你好运!:)

我认为你让问题变得比需要的更复杂,关于实现的提示:

char expression[21] = {};

我意识到给你完整的代码来复制是没有帮助的,所以你自己仔细想想,祝你好运!:)

这是一个简单的问题,你应该能够自己解决。这里有一个算法来指导你(当然我不会为你写代码,因为那是完全错误的):

  • 从中点到端点遍历输入,每一步都将一个元素推到堆栈上
  • 在每个步骤中,从起点到中点遍历输入,从堆栈中弹出一个元素以与输入元素进行比较
  • 如果堆栈元素为“]”,输入元素为“[”,则继续。检查每个接受的分隔符类型,如果它们在正确的方向上匹配,则继续。如果它们不匹配,则失败。忽略不属于接受的分隔符类型的元素

  • 您需要在这里计算一点来处理中点(如何计算它,以及如何处理偶数/奇数个元素,等等)。我建议你先编一个好答案和一个坏答案,然后在纸上测试算法。祝你好运!

    这是一个简单的问题,你应该能够自己解决。这里有一个算法来指导你(当然我不会为你写代码,因为那是完全错误的):

  • 从中点到端点遍历输入,每一步都将一个元素推到堆栈上
  • 在每个步骤中,从起点到中点遍历输入,从堆栈中弹出一个元素以与输入元素进行比较
  • 如果堆栈元素为“]”,输入元素为“[”,则继续。检查每个接受的分隔符类型,如果它们在正确的方向上匹配,则继续。如果它们不匹配,则失败。忽略不属于接受的分隔符类型的元素

  • 您需要在这里计算一点来处理中点(如何计算它,以及如何处理偶数/奇数个元素,等等)。我建议先编一个好答案和一个坏答案,然后在纸上测试算法。祝你好运!

    什么不起作用?哪些输入没有给出期望的输出?哪些不起作用?哪些输入没有给出期望的输出?笑OP几乎肯定在做作业,而你刚刚给了OP完整的答案,这不会教你他操作任何东西。:-)但是,是的,这是你“应该”做的。除了你没有在所有接近的情况下测试堆栈是否为非空。谢谢大家,非常有用!@Omnifarious我没有意识到这一点,只是恢复了我的代码:)我也认为在这里给出完整的代码没有帮助,我更愿意给出一些提示,谢谢提醒!笑OP几乎肯定是在做作业,而你刚刚给了OP完整的答案,这不会教OP任何东西。:-)但是,是的,这是你“应该”做的。除了你没有测试堆栈在所有接近的情况下是否为非空。谢谢大家,非常有帮助!@Omnifarious我没有意识到这一点,只是恢复了我的代码:)我也我觉得在这里给出完整的代码没有帮助,我更愿意给出一些提示,谢谢提醒!