-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex_V5.c
151 lines (149 loc) · 3.34 KB
/
index_V5.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include<stdio.h>
typedef char string[1000];
const strLen=1000;
char itoc(int k){
switch(k){
case 1:
return '1';
case 2:
return '2';
case 3:
return '3';
case 4:
return '4';
case 5:
return '5';
case 6:
return '6';
case 7:
return '7';
case 8:
return '8';
case 9:
return '9';
default:
return '0';
}
return '0';
}
int ctoi(char c){
switch(c){
case '0':
return 1;
break;
case '1':
return 1;
break;
case '2':
return 2;
break;
case '3':
return 3;
break;
case '4':
return 4;
break;
case '5':
return 5;
break;
case '6':
return 6;
break;
case '7':
return 7;
break;
case '8':
return 8;
break;
case '9':
return 9;
break;
default:
return 0;
break;
}
return 0;
}
/*
expr = mul ("+" mul | "-"mul)*
mul = term ("*" term | "/" term)*
term = num | "(" expr ")"
*/
int calcu(char model,int num_1,int num_2){
switch(model){
case '+':
return num_1+num_2;
case '-':
return num_1-num_2;
case '*':
return num_1*num_2;
case '/':
return num_1/num_2;
case '%':
return num_1%num_2;
default:
break;
}
return 0;
}
int parse(string s,int p){
int num=0;
int sum=0;
int mul_num=0;
int k=0;
int A=0;
char before;//只是為了不要讓編輯器報錯宣告的 不要使用
char mul_before=' ';
char expr_before=' ';
int sum=0;
/*分析字串規則*/
while(s[p]!='\0'&&s[p]!='\n'){
if(s[p]==' '){ //檢查目前是否為空格
if(s[p+1]=='*'||s[p+1]=='/'||s[p+1]=='%'){
if(mul_num!=0){
num = calcu(before,mul_num,num);
}else
before = s[p+1];
mul_num=num;
num=0;
continue;
}else if(s[p+1]=='+'||s[p+1]=='-'){
if(before=='*'||before=='/'||before=='%'){
sum=calcu(before,mul_num,num);
mul_num=0;
}else if(before=='+'||before=='-'){
sum=calcu(before,sum,num);
}
before = s[p+1]=='+'?'+':'-';
num = 0;
}
}else{
num = num*10+ctoi(s[p]);
}
}
//若讀取到文件結束
if(before=='*'||before=='/'||before=='%'){
calcu(before,mul_num,num);
mul_num=0;num=0;
}else if(before=='+'||before=='-'){
calcu(before,sum,num);
num=0;
sum=0;
}
return 0;
}
int main(){
while(1){
string keyin;
fgets(keyin,strLen,stdin);
if(keyin[0]=='\n'||keyin[0]=='\0')break;
int str_true_length;
for(int i=0;i<strLen;i++){
if(keyin[i]=='\n'||keyin[i]=='\0'){
str_true_length=i;
break;
}
}
}
return 0;
}