好程序员训练营

<A href="http://www.goodprogrammer.org/" target="blank">ios培训</A>

------我的c语言笔记,期待与您交流! 

#include<stdio.h>

#include<stdlib>

#include<ctype.h>

#include<string.h>

#define BUFSIZE 100

#define MAXWORD 100


char buf[BUFSIZE];

int bufp=0;

struct tnode *talloc(void);

char *strdup(char *);//函数声明,同时需要函数的定义

struct tnode *addtree(struct tnode *,char *);

void treeprint(struct tnode *);

int getword(char *,int);


struct tnode

{

    char *word;

    int count;

    struct tnode *left;

    struct tnode *right;

};


/*取回一个字符(可能是压回的字符)*/

int getch(void)

{

    return (bufp>0) ? buf[--bufp]:getchar();

}


/*把字符压回到输入中*/

void ungetch(int c)

{

    if(bufp >= BUFSIZE)

        printf("ungetch: too many characters\n");

    else

buf[bufp++]=c;

}


/*getword函数:从输入中读取下一个单词或字符*/

int getword(char *word,int lim)

{

    int c,getch(void);

    void ungetch(int);

    char *w=word;


    while(isspace(c=getch()));

       if(c!=EOF)

          *w++=c;

  if(!isalpha(c))

  {

      *w='\0';

      return c;

  }

  for(;--lim>0;w++)

     if(!isalnum(*w=getch()))

     {

         ungetch(*w);

 break;

     }

  *w='\0';

    return word[0];

}


/*addtree函数:在P的位置或p的下方增加一个w节点*/

struct tnode *addtree(struct tnode *p, char *w)

{

    int cond;


    if(p==NULL)

    {

p=talloc();

p->word=strdup(w);

p->count=1;

p->left=p->right=NULL;

    }

    else if((cond=strcmp(w,p->word))==0)

p->count++;

    else if(cond<0)

p->left=addtree(p->left,w);

    else

p->right=addtree(p->right,w);

    return p;


/*strdup函数:复制s到某个位置*/

char *strdup(char *s)

{

    char *p;


    p=(char *) malloc(strlen(s)+1);

    if(p!=NULL)

strcpy(p,s);

    return p;

}


/*talloc函数:创建一个tnode */

struct tnode *talloc(void)

{

    return (struct tnode *) malloc(sizeof(struct tnode));

}


int main()

{

    struct tnode *root;

    char word[MAXWORD];


    root=NULL;

    while(getword(word,MAXWORD)!=EOF)

if(isalpha(word[0]))

    root=addtree(root,word);

treeprint(root);

    return 0;