回答編集履歴

1

コメントなど一部修正

2019/11/27 11:26

投稿

rubato6809
rubato6809

スコア1382

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  while (sx < slen && enji <= maxEnji) {
34
34
 
35
- int tpos = tx + sx + enji; // 検査する tstr の添字
35
+ int tpos = tx + sx + enji; // 検査する tstr の位置
36
36
 
37
37
  if (tpos >= tlen) break; // オーバーラン対策
38
38
 
@@ -42,11 +42,11 @@
42
42
 
43
43
  if (tstr[tpos] == sstr[sx]) {
44
44
 
45
- ++sx; // 一致したで先へ進め
45
+ ++sx; // 一致、sstr 次の文字に移
46
46
 
47
47
  } else {
48
48
 
49
- ++enji; // 不一致、衍字出現
49
+ ++enji; // 衍字、tstr の比較位置をずらす
50
50
 
51
51
  }
52
52
 
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- if (sx == slen) // sstr の最後まで来成功!
57
+ if (sx == slen) // sstr の最後まで来たら、成功!
58
58
 
59
59
  return true;
60
60
 
@@ -78,8 +78,8 @@
78
78
 
79
79
  ```
80
80
 
81
- こういう処理は、いつまでも main() の中でやってしまうのでなく、さっさと関数化することを心がけてください。そして関数の中では判定処理だけに集中する・・・これも分割統治のひとつの考え方です。私は true/false を返す関数にしました。
81
+ こういう処理は、いつまでも main() の中でやってしまとするのでなく、さっさと関数化することを心がけてください。そして関数の中では判定処理だけに集中する・・・これも分割統治のひとつの考え方です。私は true/false を返すだけの関数にしました。
82
82
 
83
83
  質問者のコードが T[21] と S[11] だったので、引数を tstr、sstr として、それぞれ tlen, slen (文字列の長さ)、tx, sx (文字配列の添字)という変数名にしましたが、センス良くありません(苦笑)、そこは勘弁してください。
84
84
 
85
- ちなみに、strstr() は許容する衍字数が0の場合と考えられますので、私は strstr() 関数を書いてみて(いわゆる車輪の再発明)、それを元に修正することで、このコードを得ました。
85
+ ちなみに、strstr() は許容する衍字数が0の場合ので、私はまず strstr() 関数を書いてみて(いわゆる車輪の再発明)、それを元に修正することで、このコードを得ました。