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

回答編集履歴

1

コメントなど一部修正

2019/11/27 11:26

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -15,18 +15,18 @@
15
15
  * tstr[tx] から始まる文字列は sstr と一致するか?
16
16
  */
17
17
  while (sx < slen && enji <= maxEnji) {
18
- int tpos = tx + sx + enji; // 検査する tstr の添字
18
+ int tpos = tx + sx + enji; // 検査する tstr の位置
19
19
  if (tpos >= tlen) break; // オーバーラン対策
20
20
 
21
21
  // sstr[sx] と一致する tstr[??] を見つけながら先へ進む
22
22
  if (tstr[tpos] == sstr[sx]) {
23
- ++sx; // 一致したで先へ進め
23
+ ++sx; // 一致、sstr 次の文字に移
24
24
  } else {
25
- ++enji; // 不一致、衍字出現
25
+ ++enji; // 衍字、tstr の比較位置をずらす
26
26
  }
27
27
  }
28
28
 
29
- if (sx == slen) // sstr の最後まで来成功!
29
+ if (sx == slen) // sstr の最後まで来たら、成功!
30
30
  return true;
31
31
  }
32
32
 
@@ -38,6 +38,6 @@
38
38
  printf("valid");
39
39
  */
40
40
  ```
41
- こういう処理は、いつまでも main() の中でやってしまうのでなく、さっさと関数化することを心がけてください。そして関数の中では判定処理だけに集中する・・・これも分割統治のひとつの考え方です。私は true/false を返す関数にしました。
41
+ こういう処理は、いつまでも main() の中でやってしまとするのでなく、さっさと関数化することを心がけてください。そして関数の中では判定処理だけに集中する・・・これも分割統治のひとつの考え方です。私は true/false を返すだけの関数にしました。
42
42
  質問者のコードが T[21] と S[11] だったので、引数を tstr、sstr として、それぞれ tlen, slen (文字列の長さ)、tx, sx (文字配列の添字)という変数名にしましたが、センス良くありません(苦笑)、そこは勘弁してください。
43
- ちなみに、strstr() は許容する衍字数が0の場合と考えられますので、私は strstr() 関数を書いてみて(いわゆる車輪の再発明)、それを元に修正することで、このコードを得ました。
43
+ ちなみに、strstr() は許容する衍字数が0の場合ので、私はまず strstr() 関数を書いてみて(いわゆる車輪の再発明)、それを元に修正することで、このコードを得ました。