//用栈来实现 //遇到左括号压栈 //遇到右括号弹栈.并匹配,若不匹配出错 //处理完后,若栈不位空,表示出错 //注意问题: //1。出栈时没有考虑堆栈下溢的情形:类似"())))"的输入必然导致程序崩溃! #include<iostream> #include <cmath> #include<fstream> #include <stack> #include <list> using namespace std;// 在VC中c++无法用ios::nocreate,而用.h无法用exit struct bracket { char bk; int row; int line; }A={'{',0,0},B={'[',0,0},C={'(',0,0},a={'}',0,0},b={']',0,0},c={')',0,0}; int dis=3; int main() { stack <bracket, list<bracket> > istack; bracket X; int row=1,line=0; ifstream infile("f.cpp",ios::in/*|ios::nocreate*/);//定义输入文件流对象,以输入方式打开磁盘文件f.cpp if(! infile) { cout<<"open error!"<<endl; return 0; //exit(1); } for(int i=0;i<200;i++) { X.bk=infile.get(); line++; if(X.bk=='"') ////////////////////////////////////////////////////////////////// // 进栈前去掉" " ' '的当作字符的括号首先//想到infile.ignore(n,'/*'),跳过,但无法计R各L, //用while(){infile.ignore();line++}, //又会在当引号里字符奇偶性会可能// 导致"被跳过,没有终止条件,对奇偶判//断显得复杂了 //用Continue结束实现 while(infile.get()!='"') { continue; line++; } |