回答編集履歴

2

内容修正

2017/02/09 00:32

投稿

can110
can110

スコア38266

test CHANGED
@@ -1,8 +1,10 @@
1
1
  まず2番目の例は'e'がないとき無限ループに陥ります。
2
+
3
+ また、多重ループでbreakを使う場合は、どのループに抜けるかを意識する必要があります。
2
4
 
3
5
 
4
6
 
5
- このうな不具合を防ぐため、文字列の走査は1つのループでおこないたいです。
7
+ って、文字列の走査は1つのループでおこないたいです。
6
8
 
7
9
  また、[状態遷移](https://codezine.jp/article/detail/8359)を意識すると、以下のように書けます。
8
10
 

1

複数のa\.\.\.eを処理するように修正

2017/02/09 00:32

投稿

can110
can110

スコア38266

test CHANGED
@@ -8,15 +8,15 @@
8
8
 
9
9
 
10
10
 
11
+ ※複数のa...eを処理するように修正
12
+
11
13
  ```C
12
14
 
15
+ #define STATE_START 0 // 開始
13
16
 
17
+ #define STATE_BETWEEN_AE 1 // aとeの間
14
18
 
15
- #define STATE_START 0 // 開始
16
-
17
- #define STATE_BETWEEN_AE 1 // aとeの間
18
-
19
- #define STATE_END 2 // 終了
19
+ #define STATE_END 2 // 終了
20
20
 
21
21
 
22
22
 
@@ -26,38 +26,32 @@
26
26
 
27
27
 
28
28
 
29
- if( state == STATE_START){
29
+ if( state == STATE_START){
30
30
 
31
- if( test[i] == 'a'){
31
+ if( test[i] == 'a'){
32
32
 
33
- state = STATE_BETWEEN_AE;
33
+ state = STATE_BETWEEN_AE;
34
34
 
35
- }
35
+ }
36
36
 
37
- }
37
+ }
38
38
 
39
- else if( state == STATE_BETWEEN_AE){
39
+ else if( state == STATE_BETWEEN_AE){
40
40
 
41
- if(test[i] == 'e'){
41
+ if(test[i] == 'e'){
42
42
 
43
- state = STATE_END;
43
+ // 処理
44
44
 
45
- break;
46
45
 
47
- }
48
46
 
47
+ state = STATE_START; // 引き続きaを探す
48
+
49
+ //break; // 一組のa...eだけを処理するなら抜ける
50
+
49
- }
51
+ }
52
+
53
+ }
50
54
 
51
55
  }
52
56
 
53
-
54
-
55
- if( state == STATE_END){
56
-
57
- // 処理
58
-
59
- }
60
-
61
-
62
-
63
57
  ```