07/07/16 23:18:52
>>120
#include <stdio.h>
int main(int argc, char **argv)
{
char *queue;
int c, qhead = 0, qtail = 0, qsize;
if (argc < 3)
return fprintf(stderr, "usage: %s from to\n", argv[0]), 1;
qsize = strlen(argv[1]);
queue = malloc(qsize);
while ((c = getchar()) != EOF) {
queue[qtail] = c;
qtail = (qtail + 1) % qsize;
if (qhead != qtail) continue;
if (memcmp(&queue[qhead], argv[1], qsize - qhead) == 0
&& memcmp(queue, argv[1] + qsize - qhead, qtail) == 0) {
fputs(argv[2], stdout);
qhead = qtail = 0;
} else {
putchar(queue[qhead]);
qhead = (qhead + 1) % qsize;
}
}
while (qhead != qtail) {
putchar(queue[qhead]);
qhead = (qhead + 1) % qsize;
}
free(queue);
return 0;
}