Image
WELCOME TO MY HOMEPAGE
ぽてとのC言語練習中ページ
Image

Word.c ver.007改訂版 のソースです。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define MAXCHAR 64
#define MAXWORD 256

typedef struct tnode{
  char word[MAXCHAR];
  /* int count=0; */
  int count;
  struct tnode *left;
  struct tnode *right;
}Node;


Node* makeNode(const char *str){
  /* ノード作成 */
  Node *root;
  root=(Node *)malloc(sizeof(Node));

  strcpy(root->word, str);
  root->count=1;
  root->left=root->right=NULL;

  return root;
}

Node* addNode(Node* p, const char *str){
  /* ノード追加処理 */

  if (p==NULL){   /*今いるところが空欄なら新ノードを作成*/
    p=makeNode(str);
  }
  else if (!strcmp(str, p->word))
    p->count++;
  else if (strcmp(str, p->word)<0)
    p->left=addNode(p->left, str);
  else
    p->right=addNode(p->right, str);

  return p;
}

void TraverseNode(const Node *p){
  /* 解析と出力*/
  if (p!=NULL){
    TraverseNode(p->left);
    printf("%s %4d\n", p->word, p->count);
    TraverseNode(p->right);
  }
}

/******以下ver0.07改訂版で変更しました。******/

int main(void){
  char *ptr[MAXWORD]; /*最大単語数*/
  char temp[MAXCHAR];
	
  FILE *fp;
  unsigned int i=0,j=0;
  char c;
	
  Node root={'\0','0',NULL,NULL};
  Node *node;
  node=&root;

    fp=fopen("file1.txt","r");
	
  if (fp==NULL){
	printf("ファイルオープンに失敗しました。\n");
	return -1;
  }

    while ((c=fgetc(fp))!=EOF || j<=MAXWORD){

    if (isalpha(c)) {  /*英文字が来た時*/
      temp[i]=c;
      i++;
      }
	  
    else if (i==0){/*英文字でなく、なおかつ以前も英文字でなかった時*/
	  continue; 
    }
	  
     else{ /*英文字でなく、なおかつ前が英文字であった時*/

          ptr[j]=(char *)malloc((sizeof(char)*i)+1); /*単語を格納するための場所確保*/
      strcpy((char *)*ptr[j], temp);         /*確保した場所に単語を格納*/
      node=addNode(node, (char *)ptr[j]);   /*単語をaddNode関数に渡す*/
	 j++;
	 i=0;
       }
    }
    fclose(fp);
	TraverseNode(&root);
	return 0;
}

トップページへ戻る