回答編集履歴
2
修正
answer
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
return 0;
|
45
45
|
}
|
46
46
|
```
|
47
|
-
```
|
47
|
+
```text
|
48
48
|
S='take', T='' : invalid
|
49
49
|
S='take', T='tak' : invalid
|
50
50
|
S='take', T='take' : valid
|
1
定数化
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 >
|
20
|
+
} else if(++c > SUPERFLUOUS_LETTER_MAX) {
|
16
21
|
break;
|
17
22
|
}
|
18
23
|
}
|
19
|
-
if(c <=
|
24
|
+
if(c <= SUPERFLUOUS_LETTER_MAX) return VALID;
|
20
25
|
}
|
21
26
|
}
|
22
|
-
return
|
27
|
+
return INVALID;
|
23
28
|
}
|
24
29
|
void printFind(char *s, char *t) {
|
25
30
|
printf("S='%s', T='%s' : %s\n",
|
26
|
-
|
31
|
+
s, t, find(s,t)?"valid":"invalid");
|
27
32
|
}
|
28
33
|
int main() {
|
29
34
|
char *s = "take";
|