小编程题之检测字符串表达式中括号是否配对

来源:互联网 发布:java c base64 编辑:程序博客网 时间:2024/06/05 19:22

如题,就直接拍照吧

首先想到的是将符号信息提取出来,放到一个数组里,然后化繁为简,只对数组进行操作,

初始源代码:

#include<iostream>#include<stdlib.h>using namespace std;/* {} 1 -1[] 2 -2() 3 -3*/void check(char* str,<span style="color:#ff0000;">int** arry</span>,int* size){int i = 0;//int m[strlen(str)];<span style="color:#ff0000;">int* m =new int[10] ; </span>   //一开始 没有开辟堆,所以 当将该地址返回时,就是有问题的。while((*str)!= '\0'){       cout<<(*str)<<endl;if((*str) == '{')m[i++]=1;else if((*str) == '}')m[i++]=-1;else if((*str) == '[')m[i++]=2;else if((*str) == ']')m[i++]=-2;else if((*str) == '(')m[i++]=3;else if((*str) == ')')m[i++]=-3;str++;}    (*size)=i;(*arry)=m;}int handle(int* arry,const int* size){int sum=1;int i;for(i=0;i<(*size);i++)sum=sum+arry[i];if(sum==1)    return 1;elsereturn 0;}void show(int* arry,const int* size){int i;cout<<"size "<<(*size)<<endl;for(i=0;i<(*size);i++)cout<<(int)arry[i]<<" ";cout<<endl;}int main(){char str[] = "(){[}";int* arry;int size;check(str,&arry,&size);show(arry,&size);if(handle(arry,&size))cout<<"right"<<endl;elsecout<<"error"<<endl;}

在完成上面时有两个问题出错了,(红色关键词)。第一个往函数外传递地址时,一定是要在堆中开辟空间的;如果只是想通过函数修改函数外数据的值,传递地址即可,但是如果想将函数内开辟的地址传递出去,就必须用到指向指针的指针。
对于初步代码,只是用了简单的算法来判断的,只能判断成对出现括号的情况。

-------------------------------------------------------------------------------------------------------------------------------------


0 0
原创粉丝点击