#include<iostream> using namespace std; int value=1; char ch; int iloact=0; char str [80]; void ProT (); void ProF (); void ProE(); void error()//Error handling function { cout<<"False"; } void ProE ()//Recursive program for syntax E { ProT(); if (ch=='+'||ch=='-') { iloact++; ch=str [iloact];// Move forward one position ProE(); } } void ProT ()//Recursive program for syntax T { ProF(); if (ch=='*'||ch=='/') { iloact++; ch=str [iloact]; ProT(); } } void ProF () { if (ch=='(') { iloact++; ch=str[iloact]; ProE(); if(ch==')') { iloact++; ch=str[iloact]; } else{error(); value=0;} } else if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')) { iloact++; ch=str[iloact]; } else{error(); value=0;} } int main() { cin>>str; ch=str[0]; while(ch!=NULL) { ProE(); if(!value) break; } if((ch==NULL)&&(value!=0)) cout<<"True"; return 0; 改进这个代码
时间: 2023-10-22 12:07:45 浏览: 155
#include <iostream>
这段代码存在一个问题,即在 while 循环中判断 ch 是否为 NULL 的方法不正确,应该改为判断 ch 是否为 '\0'。另外,输入表达式的方式也不太友好,建议改为使用 getline 函数获取一行字符串。
另外,代码中的 error 函数只是输出了 False,并没有中止程序的执行。为了更好地处理错误,可以把该函数改为抛出异常,让程序在出现错误时立即中止执行。
以下是改进后的代码:
```
#include <iostream>
#include <string>
using namespace std;
int iloact = 0;
string str;
char ch;
void ProT();
void ProF();
void ProE();
void error(const string& msg) {
throw runtime_error(msg);
}
void ProE() {
ProT();
while (ch == '+' || ch == '-') {
iloact++;
ch = str[iloact];
ProT();
}
}
void ProT() {
ProF();
while (ch == '*' || ch == '/') {
iloact++;
ch = str[iloact];
ProF();
}
}
void ProF() {
if (ch == '(') {
iloact++;
ch = str[iloact];
ProE();
if (ch == ')') {
iloact++;
ch = str[iloact];
} else {
error("expected ')'");
}
} else if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z')) {
iloact++;
ch = str[iloact];
} else {
error("unexpected character");
}
}
int main() {
getline(cin, str);
ch = str[0];
try {
ProE();
if (ch != '\0') {
error("unexpected character");
}
cout << "True" << endl;
} catch (const exception& e) {
cerr << "False: " << e.what() << endl;
}
return 0;
}
```
改进后的代码使用了异常处理机制,当遇到错误时会抛出 runtime_error 异常,并输出错误信息。另外,输入的表达式字符串改为使用 string 类型,以便更好地处理字符串。
阅读全文