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

📄 words.c.bak

📁 linux下的C语言开发
💻 BAK
字号:
/******************************************************** * words -- scan a file and print out a list of words   * *              in ASCII order.                         * *                                                      * * Usage:                                               * *      words <file>                                    * ********************************************************/#include <stdio.h>#include <ctype.h>#include <string.h>#include <stdlib.h>    struct node {    struct node    *left;       /* tree to the left */    struct node    *right;      /* tree to the right */    char           *word;       /* word for this tree */};/* the top of the tree */static struct node *root = NULL;/******************************************************** * memory_error -- write error and die                  * ********************************************************/void memory_error(void){    fprintf(stderr, "Error:Out of memory\n");    exit(8);}/******************************************************** * save_string -- save a string on the heap             * *                                                      * * Parameters                                           * *      string -- string to save                        * *                                                      * * Returns                                              * *      pointer to malloc-ed section of memory with     * *      the string copied into it.                      * ********************************************************/char *save_string(char *string){    char *new_string;   /* where we are going to put string */    new_string = malloc((unsigned) (strlen(string) + 1));    if (new_string == NULL)        memory_error();    strcpy(new_string, string);    return (new_string);}/******************************************************** * enter -- enter a word into the tree                  * *                                                      * * Parameters                                           * *      node -- current node we are looking at          * *      word -- word to enter                           * ********************************************************/void enter(struct node **node, char *word){    int  result;        /* result of strcmp */    char *save_string(char *);  /* save a string on the heap */    /*      * If the current node is null, we have reached the bottom     * of the tree and must create a new node.     */    if ((*node) == NULL) {	/* Allocate memory for a new node */        (*node) = malloc(sizeof(struct node));        if ((*node) == NULL)            memory_error();	/* Initialize the new node */        (*node)->left = NULL;        (*node)->right = NULL;        (*node)->word = save_string(word);	return;    }    /* Check to see where the word goes */    result = strcmp((*node)->word, word);    /* The current node alreadys contains the word, no entry necessary */    if (result == 0)        return;    /* The word must be entered in the left or right sub-tree */    if (result < 0)        enter(&(*node)->right, word);    else        enter(&(*node)->left, word);}/******************************************************** * scan -- scan the file for words                      * *                                                      * * Parameters                                           * *      name -- name of the file to scan                * ********************************************************/void scan(char *name){    char word[100];     /* word we are working on */    int  index;         /* index into the word */    int  ch;            /* current character */    FILE *in_file;      /* input file */    in_file = fopen(name, "r");    if (in_file == NULL) {        fprintf(stderr, "Error:Unable to open %s\n", name);        exit(8);    }    while (1) {        /* scan past the whitespace */        while (1) {            ch = fgetc(in_file);            if (isalpha(ch) || (ch == EOF))                break;        }        if (ch == EOF)            break;        word[0] = ch;        for (index = 1; index < sizeof(word); ++index) {            ch = fgetc(in_file);            if (!isalpha(ch))                break;            word[index] = ch;        }        /* put a null on the end */        word[index] = '\0';        enter(&root, word);    }    fclose(in_file);}/******************************************************** * print_tree -- print out the words in a tree          * *                                                      * * Parameters                                           * *      top -- the root of the tree to print            * ********************************************************/void print_tree(struct node *top){    if (top == NULL)        return;                 /* short tree */    print_tree(top->left);    printf("%s\n", top->word);    print_tree(top->right);}int main(int argc, char *argv[]){    if (argc != 2) {        fprintf(stderr, "Error:Wrong number of parameters\n");        fprintf(stderr, "      on the command line\n");        fprintf(stderr, "Usage is:\n");        fprintf(stderr, "    words 'file'\n");        exit(8);    }    scan(argv[1]);    print_tree(root);    return (0);}

⌨️ 快捷键说明

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