#4
by かずま » 5年前
別解です。文字コードが ASCII であることを仮定しています。
コード:
#include <stdio.h>
#define X12(x) x,x,x,x,x,x,x,x,x,x,x,x
#define X13(x) X12(x),x
#define X18(x) X13(x),x,x,x,x,x
#define X69(x) X18(x),X18(x),X18(x),X13(x),x,x
char dfa[6][128] = { // Deterministic Finite Automaton
// \0..D, E, F..Q, R, S..d, e, f..q, r, s..\177
{ X69(0), 2, X12(0), 0, X18(0), 2, X12(0), 0, X13(0) }, // 0
{ X69(0), 1, X12(0), 4, X18(0), 1, X12(0), 4, X13(0) }, // 1
{ X69(1), 3, X12(1), 1, X18(1), 3, X12(1), 1, X13(1) }, // 2
{ X69(1), 3, X12(1), 5, X18(1), 3, X12(1), 5, X13(1) }, // 3
}; // 4, 5
int main(void)
{
char s[256];
while (1) {
printf("Input a string:");
if (!fgets(s, sizeof(s), stdin) || *s == '\n') break;
int n = 0, t = 0, i = 0;
while (s[i]) (t = dfa[t][s[i++]]) > 3 && (n++, t -= 4);
printf("The total number of e*r is %d.\n", n);
}
return 0;
}
なぜ、質問者は回答に応答しないのでしょうか?
別解です。文字コードが ASCII であることを仮定しています。
[code]
#include <stdio.h>
#define X12(x) x,x,x,x,x,x,x,x,x,x,x,x
#define X13(x) X12(x),x
#define X18(x) X13(x),x,x,x,x,x
#define X69(x) X18(x),X18(x),X18(x),X13(x),x,x
char dfa[6][128] = { // Deterministic Finite Automaton
// \0..D, E, F..Q, R, S..d, e, f..q, r, s..\177
{ X69(0), 2, X12(0), 0, X18(0), 2, X12(0), 0, X13(0) }, // 0
{ X69(0), 1, X12(0), 4, X18(0), 1, X12(0), 4, X13(0) }, // 1
{ X69(1), 3, X12(1), 1, X18(1), 3, X12(1), 1, X13(1) }, // 2
{ X69(1), 3, X12(1), 5, X18(1), 3, X12(1), 5, X13(1) }, // 3
}; // 4, 5
int main(void)
{
char s[256];
while (1) {
printf("Input a string:");
if (!fgets(s, sizeof(s), stdin) || *s == '\n') break;
int n = 0, t = 0, i = 0;
while (s[i]) (t = dfa[t][s[i++]]) > 3 && (n++, t -= 4);
printf("The total number of e*r is %d.\n", n);
}
return 0;
}
[/code]
なぜ、質問者は回答に応答しないのでしょうか?