teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2017/06/19 07:54

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -9,8 +9,26 @@
9
9
 
10
10
  3が難しかったらとりあえず式を文字列として見て、数字の前に(、それ以降の数字の後ろに)を挿入した文字列を順次作成していけば、あとは一般的な式の評価を行えばいいと思います。
11
11
 
12
+ **追記1**
13
+ enumと構造体を使ってオペレータか数字の配列を作る
14
+ ```C
15
+ enum {
16
+ OP_ADD,
17
+ OP_SUB,
18
+ OP_MUL,
19
+ OP_DIV,
20
+ NUMEBR,
21
+ }KIND;
12
22
 
23
+ struct {
24
+ KIND kind;
25
+ int value;
26
+ }ELEMENT;
27
+
28
+ ELEMENT elements[30];
29
+ ```
30
+
13
- **追記**
31
+ **追記2**
14
32
  ()を総当たりで挿入する(オペレータは1文字、スペースは含まない前提)
15
33
 
16
34
  ```C

1

追記

2017/06/19 07:54

投稿

toki_td
toki_td

スコア2850

answer CHANGED
@@ -7,4 +7,64 @@
7
7
 
8
8
  といった感じでしょうか?
9
9
 
10
- 3が難しかったらとりあえず式を文字列として見て、数字の前に(、それ以降の数字の後ろに)を挿入した文字列を順次作成していけば、あとは一般的な式の評価を行えばいいと思います。
10
+ 3が難しかったらとりあえず式を文字列として見て、数字の前に(、それ以降の数字の後ろに)を挿入した文字列を順次作成していけば、あとは一般的な式の評価を行えばいいと思います。
11
+
12
+
13
+ **追記**
14
+ ()を総当たりで挿入する(オペレータは1文字、スペースは含まない前提)
15
+
16
+ ```C
17
+
18
+ static int evaluateExpression(const char* exp)
19
+ {
20
+ printf("eval: %s\n", exp);
21
+ return 0; // none
22
+ }
23
+ static const char* passNumber(const char* s)
24
+ {
25
+ while (*s && isdigit(*s)) s++;
26
+ return s;
27
+ }
28
+
29
+ int main()
30
+ {
31
+ const char* exp = "18-7*3-1+2=6";
32
+
33
+ const char* openPara = exp;
34
+ const char* closePara;
35
+
36
+ char exp2[100];
37
+
38
+ while (1) {
39
+ closePara = passNumber(openPara);
40
+
41
+ while (*closePara != '=') {
42
+ closePara = passNumber(closePara + 1); // +1 : pass operator
43
+
44
+ char* d = exp2;
45
+
46
+ for (const char* s = exp; *s; s++) {
47
+ if (s == openPara) *d++ = '(';
48
+ if (s == closePara) *d++ = ')';
49
+ *d++ = *s;
50
+ }
51
+ *d = '\0';
52
+
53
+ if (evaluateExpression(exp2)) {
54
+ printf("anser is : %s\n", exp2);
55
+ goto EXIT:
56
+ }
57
+ }
58
+
59
+ openPara = passNumber(openPara);
60
+ if (*openPara == '=') {
61
+ break;
62
+ }
63
+ openPara++; // pass operator
64
+ }
65
+ EXIT:
66
+
67
+ return 0;
68
+ }
69
+ ```
70
+ あとは[このへんを参考に](http://blog.goo.ne.jp/masaki_goo_2006/e/754f937f81f8b3ac389b9265c52fd98d)式を評価してみる