输入一个算术表达式,判断括号是否匹配
写一程序判断
[(3+3)*3]匹配
[(9*2]不匹配
问题点数:60、回复次数:6Top
1 楼dgdsfsd(dsfsfs)回复于 2003-12-03 15:14:24 得分 0
用CTop
2 楼plainsong(短歌)()回复于 2003-12-03 15:14:37 得分 40
以前写过一个,是处理多行的,你自己改一下吧:
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
#include <ctime>
//---------------------------------------------------------------------------
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
typedef std::stack<char> stack;
int main(int argc, char* argv[])
{
std::clock_t __clock = std::clock();
ifstream inf("e:\\utilcls.h");
int LineNumber(0);
stack Stack;
while(inf)
{
// cout << "Line Number:" << LineNumber <<"..." << endl;
string Line;
getline(inf, Line);
string::size_type Pos = Line.find_first_of("([{)]}");
const string::size_type NPos = string::npos;
while(Pos != NPos)
{
char Ch = Line[Pos];
switch(Ch)
{
case '(':
case '[':
case '{':
Stack.push(Ch);
break;
case ')':
if (Stack.size() == 0 || Stack.top() != '(')
{
cout << "Error:" << LineNumber << ":" << string(Line, 0, Pos + 1) << endl;
return -1;
}
else
Stack.pop();
break;
case ']':
if (Stack.size() == 0 || Stack.top() != '[')
{
cout << "Error:" << LineNumber << ":" << string(Line, 0, Pos + 1) << endl;
return -1;
}
else
Stack.pop();
break;
case '}':
if (Stack.size() == 0 || Stack.top() != '{')
{
cout << "Error:" << LineNumber << ":" << string(Line, 0, Pos + 1) << endl;
return -1;
}
else
Stack.pop();
break;
}
Pos = Line.find_first_of("([{}])", Pos +1);
}
LineNumber ++;
}
__clock = std::clock() - __clock;
cout << double(__clock) / CLK_TCK << endl;
std::cin.get();
return 0;
}
Top
3 楼plainsong(短歌)()回复于 2003-12-03 15:17:28 得分 0
少了一句:
#include <iostream>
#include <fstream>
#include <string>
#include <stack>
#include <ctime>
//---------------------------------------------------------------------------
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
typedef std::stack<char> stack;
int main(int argc, char* argv[])
{
std::clock_t __clock = std::clock();
ifstream inf("e:\\utilcls.h");
int LineNumber(0);
stack Stack;
while(inf)
{
// cout << "Line Number:" << LineNumber <<"..." << endl;
string Line;
getline(inf, Line);
string::size_type Pos = Line.find_first_of("([{)]}");
const string::size_type NPos = string::npos;
while(Pos != NPos)
{
char Ch = Line[Pos];
switch(Ch)
{
case '(':
case '[':
case '{':
Stack.push(Ch);
break;
case ')':
if (Stack.size() == 0 || Stack.top() != '(')
{
cout << "Error:" << LineNumber << ":" << string(Line, 0, Pos + 1) << endl;
return -1;
}
else
Stack.pop();
break;
case ']':
if (Stack.size() == 0 || Stack.top() != '[')
{
cout << "Error:" << LineNumber << ":" << string(Line, 0, Pos + 1) << endl;
return -1;
}
else
Stack.pop();
break;
case '}':
if (Stack.size() == 0 || Stack.top() != '{')
{
cout << "Error:" << LineNumber << ":" << string(Line, 0, Pos + 1) << endl;
return -1;
}
else
Stack.pop();
break;
}
Pos = Line.find_first_of("([{}])", Pos +1);
}
LineNumber ++;
}
if (Stack.size() > 0)
cout << "Error:" << Stack.top() << endl;
__clock = std::clock() - __clock;
cout << double(__clock) / CLK_TCK << endl;
std::cin.get();
return 0;
}
原贴在这:
http://expert.csdn.net/Expert/TopicView1.asp?id=2441264Top
4 楼november5(void)回复于 2003-12-03 15:18:09 得分 10
设置三个计数器
int c1 = 0; //for '('&')'
int c2 = 0; //for '['&']'
int c3 = 0; //for '{'&'}'
读到左半边+1,读到右半边-1
表达式输完,判断(c1==0)&&(c2==0)&&(c3==0)
不知对不对
Top
5 楼november5(void)回复于 2003-12-03 15:18:13 得分 10
设置三个计数器
int c1 = 0; //for '('&')'
int c2 = 0; //for '['&']'
int c3 = 0; //for '{'&'}'
读到左半边+1,读到右半边-1
表达式输完,判断(c1==0)&&(c2==0)&&(c3==0)
不知对不对
Top
6 楼abitz(阿奈)(老婆永远是对的!)回复于 2003-12-03 15:18:27 得分 0
典型的栈的应用问题Top




