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

Word.c ver.006 のソースです。

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

#define WORDMAX 64

typedef struct tnode{
  char word[WORDMAX];
  /* 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.06の変更点*/

/**********************************************************************
  =GetWord()=
  改行文字までの文字列str、単語格納回数i、単語格納配列wordを引数に持ち、
  文字列中の全ての単語をwordに格納して、単語格納回数を返す関数
  
  #include <ctype.h>が必要
  
  str…メイン関数で読み込んだ一文
  i……単語格納配列wordの要素番号
  word…単語格納配列。
**********************************************************************/

int GetWord(const char* str, int i, char **word){
	char c;
	int l, j=0, state=0;
	
	for (l=0; (c=str[l])!='\n' && (c=str[l])!=EOF ;l++){
		
		tolower(c);  /*大文字→小文字*/
			
		if (!isalpha(c) && c=='\''){ /*cが英文字の時*/
			word[i][j]=c;
			j++;
			}
		else{
			word[i][j]='\0';
			i++;
			j=0;
		}
	}
	return i;
}

int main(void){

  FILE *fp;
  int i=0, len;
  char str[WORDMAX], word[512][WORDMAX];
  char *c;
  
  Node root={"\0",0, NULL, NULL};

  /* ファイル操作 */
  fp=fopen("file1.txt", "r");

	while ((c=fgets(str,512,fp))!=NULL);
  		i=getword(str, i, word);
  
  len=i;
  
  for (i=0; *word[i]<=len ; i++)
  	root=addNode(&root, *word[i]);
  
  TraverseNode(&root);/*ルートの位置からトラバーサルしながら出力する*/ 
  fclose(fp);
}

トップページへ戻る



GeoCities Japan

メイン / コミュニティ / アベニュー / E-List / 街角広場
インフォメーションセンター / 検索 / ヘルプ / ガイドライン