⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hounddog.c

📁 早期freebsd实现
💻 C
字号:
#include <iostream.h>#include <stdlib.h>#include <string.h>// Read either "dog", "hound", or "hounddog".// If "dog" is found, return 1.// If "hound" is found, return 2.// If "hounddog" is found, return 3.// If non of these are found, return -1.int my_scan(streambuf* sb){    streammarker fence(sb);    char buffer[20];    // Try reading "hounddog":    if (sb->sgetn(buffer, 8) == 8 && strncmp(buffer, "hounddog", 8) == 0)      return 3;    // No, no "hounddog":  Backup to 'fence' ...    sb->seekmark(fence);    // ... and try reading "dog":    if (sb->sgetn(buffer, 3) == 3 && strncmp(buffer, "dog", 3) == 0)      return 1;    // No, no "dog" either:  Backup to 'fence' ...    sb->seekmark(fence);    // ... and try reading "hound":    if (sb->sgetn(buffer, 5) == 5 && strncmp(buffer, "hound", 5) == 0)      return 2;    // No, no "hound" either:  Backup to 'fence' and signal failure.    sb->seekmark(fence); // Backup to 'fence'..    return -1;}int main(int argc, char **argv){    streambuf *sb = cin.rdbuf();    if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {	streambuf *ret;	int buffer_size = atoi(&argv[1][2]);	if (buffer_size == 0)	    ret = sb->setbuf(NULL, 0);	else	    ret = sb->setbuf(new char[buffer_size], buffer_size);	if (ret != sb)	    cerr << "Warning: cin.rdbuf()->setbuf failed!\n";    }    for (;;) {	int code = my_scan(sb);	int ch = sb->sbumpc();	if (code == -1 && ch == EOF)	    break;	int n = 0;	while (ch != EOF && ch != '\n') {	    n++;	    ch = sb->sbumpc();	};	if (ch == EOF) {	    cout << "[Unexpected EOF]\n";	    break;	}	cout << "Code: " << code << " followed by " << n << " chars\n";    }}

⌨️ 快捷键说明

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