markovlet.c

来自「编程珠虮随书源码,非常好的软件工程学习思想.」· C语言 代码 · 共 40 行

C
40
字号
/* Copyright (C) 2000 Lucent Technologies *//* Modified from markov.c in 'Programming Pearls' by Jon Bentley *//* markovlet.c -- generate letter-level random text from input text
    Alg: Store text in an array on input
		 Scan complete text for each output character
			(Randomly select one matching k-gram)
 */#include <stdio.h>#include <stdlib.h>

char x[5000000];int main(){	int c, i, eqsofar, max, n = 0, k = 5;
	char *p, *nextp, *q;
	while ((c = getchar()) != EOF)
		x[n++] = c;
	x[n] = 0;	p = x;
	srand(1);	for (max = 2000; max > 0; max--) {
		eqsofar = 0;
		for (q = x; q < x + n - k + 1; q++) {
			for (i = 0; i < k && *(p+i) == *(q+i); i++)
				;
			if (i == k)
				if (rand() % ++eqsofar == 0)
					nextp = q;
		}		c = *(nextp+k);
		if (c == 0)
			break;
		putchar(c);
		p = nextp+1;	}
	return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?