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

回答編集履歴

2

修正

2019/11/26 04:09

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -44,7 +44,7 @@
44
44
  return 0;
45
45
  }
46
46
  ```
47
- ```plain text
47
+ ```text
48
48
  S='take', T='' : invalid
49
49
  S='take', T='tak' : invalid
50
50
  S='take', T='take' : valid

1

定数化

2019/11/26 04:09

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -4,26 +4,31 @@
4
4
  #include <stdio.h>
5
5
  #include <string.h>
6
6
 
7
+ /* 衍字最大数 */
8
+ #define SUPERFLUOUS_LETTER_MAX 1
9
+ #define VALID 1
10
+ #define INVALID 0
11
+
7
12
  int find(char *s, char *t) {
8
13
  int i, ii, j, c;
9
14
  for(i=0; i<=(int)strlen(t)-(int)strlen(s); i++) {
10
15
  if(t[i] == s[0]) {
11
- c = 0; //衍字カウンタ
16
+ c = 0; /* 衍字カウンタ */
12
17
  for(j=0, ii=i; s[j]!='\0'; ii++) {
13
18
  if(t[ii] == s[j]) {
14
19
  j ++;
15
- } else if(++c > 1) {
20
+ } else if(++c > SUPERFLUOUS_LETTER_MAX) {
16
21
  break;
17
22
  }
18
23
  }
19
- if(c <= 1) return 1; //valid
24
+ if(c <= SUPERFLUOUS_LETTER_MAX) return VALID;
20
25
  }
21
26
  }
22
- return 0; //invalid
27
+ return INVALID;
23
28
  }
24
29
  void printFind(char *s, char *t) {
25
30
  printf("S='%s', T='%s' : %s\n",
26
- s, t, find(s,t)?"valid":"invalid");
31
+ s, t, find(s,t)?"valid":"invalid");
27
32
  }
28
33
  int main() {
29
34
  char *s = "take";