?? word_analysis.h
字號:
#include <iostream>
enum{
BUFSIZE = 20
};
struct Value
{
int i_value;
char ope_value;
char bou_value;
int place; //current place for input
int flag; //1 for int,2 for operator,3 for bound,0 for nothing
};
typedef struct Value Value;
//判斷是否為四則運算符
int isoperator(char c){
return ( c=='+'||c=='-'||c=='*'||c=='/');
}
int isbound(char c){
return ( c=='('||c==')' );
}
//去掉空白符
int getBlank(char *ch){
int i=0;
while(isspace(ch[i]))
i++;
return i;
}
//檢查輸入字符是否有效,即檢查是否是四則運算符或數字
bool sym_valid(char ch){
if(!(isdigit(ch) || isoperator(ch) || isbound(ch))){
// printf("%c: Input symbol Error!\n",ch);
return 0;
}
return 1;
}
char* concat(char ch,char* str)
{
unsigned int len=strlen(str);
if(len >= BUFSIZE)
{
printf("BUFFER OUTSIDE!");
str[0]='\0';
return str;
}
str[len]=ch;
str[len+1] = '\0';
return str;
}//concat
//詞法分析函數
Value& word_analysis(char* input){
static struct Value value;
char buff[BUFSIZE]={'\0'};
int i=0,valid=0,k=0;
//i 作為循環變量標示當前所指 input 中的字符位置
//k 作為循環變量標示當前所指 buff 中的字符位置
value.flag = 0;//初始化value為空值
i = getBlank(input);
valid = sym_valid(input[i]);
if(valid == 0)
return value;
if(isdigit(input[i])){
while(isdigit(input[i])){
strcpy(buff,concat(input[i],buff));
if(buff[0] == '\0')
return value;
i++;
}//while
i--;
value.i_value = atoi(buff);
value.flag = 1;
valid = 1;
value.place =i;
return value;
}//if
else if(isoperator(input[i])){
value.ope_value = input[i];
value.flag = 2;
valid = 1;
value.place =i;
return value;
}//else if
else {
value.bou_value = input[i];
value.flag = 3;
value.place =i;
valid = 1;
return value;
}//else
}//word_analysis
//讀入字符返回類型
// i ( ) + - * /
char* read_sym(char* input){
static char buff[BUFSIZE];
int i=0,k=0;
//if(input[0] == '#' && input[1] =='\0')
// return '#';
Value v;
while(input[i]!='#'){
v = word_analysis(&input[i]);
i += v.place;
i++;
switch(v.flag)
{
case 1: buff[k]= 'i';//數字
break;
case 2: buff[k]= v.ope_value;
break;
case 3: buff[k]= v.bou_value;
break;
default: printf("詞法錯誤!\n");
return NULL;
}
k++;
}
buff[k]='#';
buff[k+1]='\0';
return buff;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -