|
>¸µ¡¹¡¤filelength¼«ÂΤ¬Èóɸ½à¤Î(VC++¤Î)´Ø¿ô¤Ç¤¹¡£
>No.829 "Re:ʸ»úÎó¤Ë¤Ä¤¤¤Æ" (kikk¤µ¤ó)
>¤Îµ»ö¤ò¤è¤¯ÆÉ¤ó¤Ç¤ß¤Þ¤·¤ç¤¦
ÆÉ¤ó¤Ç¤ß¤¿¤Î¤Ç¤¹¤¬¡¢½é¿´¼Ô¤Î»ä¤Ë¤Ï¡¢Ã桹Íý²ò¤·¤¬¤¿¤¯
C++¤Î¥½¡¼¥¹¤ò¼«Ê¬¤Ê¤ê¤Ë¡¢C¤Î¥×¥í¥°¥é¥à¤Ç¹Í¤¨¤Æ¤ß¤¿¤ó¤Ç¤¹¤¬¡¢
fileno()¤Èfilelength()¤Èstrcmpi()¤ÎÂå¤ï¤ê¤Ë¤Ê¤ëC¤Î´Ø¿ô¤¬¤ï¤«¤é¤Ê¤¯¡¢stat()¡¢fstat()¤Ë¤Ä¤¤¤Æ¤â¿§¡¹Ãµ¤·¤Æ¤ß¤¿¤Î¤Ç¤¹¤¬¡¢»²¹Í½ñ¤¬½é¿´¼ÔÍѤʤΤǺܤäƤª¤é¤º¤ï¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿¡£
Âå¤ï¤ê¤Ë¤Ê¤ëC¤Î´Ø¿ô¤¬¤ï¤«¤é¤Ê¤«¤Ã¤¿¤Î¤Ç¡¢fileno()¤Èfilelength()¤Èstrcmpi()¤ò»ÈÍѤ·¤Æ¡¢£ã¤Î¥×¥í¥°¥é¥à¤ò¹Í¤¨¤Æ¸«¤¿¤Î¤Ç¤¹¤¬¡¢¼ÂºÝ¤Ë¡¢C¤Î¥×¥í¥°¥é¥à¤Ç¤³¤Î¥×¥í¥°¥é¥à¤òư¤«¤¹¤Ë¤Ï¤É¤Î¤è¤¦¤Ê´Ø¿ô¤ò»È¤¨¤Ðư¤«¤¹¤³¤È¤¬½ÐÍè¤ë¤Î¤Ç¤·¤ç¤¦¤«¡£
¤è¤í¤·¤±¤ì¤Ð¡¢¤³¤Î¥×¥í¥°¥é¥à¤ò½¤Àµ¤·¤Æ¡¢¶µ¤¨¤Æ¤¯¤À¤µ¤¤¡£
#include <stdio.h>
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SEPARATOR " .,!?\t\r\n"
typedef int
{
(*COMP )(const void *,const void *);a
};
typedef struct
{
char *pWord;
int Count;
} WORDINFO,*PWORDINFO;
int WordSearch(char *FileName);
void main(void )
{
WordSearch(char *);
}
/***************************************************
WORDËè¤ËÀÚ¤ê½Ð¤¹´Ø¿ô
¤³¤Î´Ø¿ô¤Î°ú¿ô¤Ë¥Õ¥¡¥¤¥ë̾¤ò»ØÄꤷ¤Þ¤¹¡£¥Õ¥¡¥¤¥ë¤¬³«¤±¤Ê¤«¤Ã¤¿¤ê¡¢
¥á¥â¥ê¤¬³ÎÊݤǤ¤Ê¤¤¾ì¹ç¤Ï0¤òÊÖ¤·¡¢À®¸ù¤¹¤ì¤Ð1¤òÊÖ¤·¤Þ¤¹¡£
******************************************************/
/* ¤È¤ê¤¢¤¨¤ºÃ±¸ì¼ïÎà¤ò300¤È¤¹¤ë */
WORDINFO WordTbl[300];
int Compare(PWORDINFO ,PWORDINFO );
int WordSearch(char *FileName)
{
PWORDINFO pSearch,pTbl;
char *pText,*tk;
size_t uSize;
size_t TblLen;
FILE *fp;
/*** phase 1 ¥Æ¥¥¹¥È¤ò¥á¥â¥ê¤Ë¥í¡¼¥É ***/
fp = fopen(FileName,"r");
if (!fp)
{
return 0;
}
uSize = (size_t )filelength(fileno(fp));
pText = (char *)calloc(uSize + 1,sizeof(char ));
if (!pText)
{
fclose(fp);
return 0;
}
fread(pText,uSize,1,fp);/*size_t·¿¤Î¥µ¥¤¥º*1¸Ä¤òpText¤ËÆÉ¤ß¹þ¤à*/
fclose(fp);
/*** phase 2 ñ¸ì¤Î°ÌÃÖ¤ò¥Æ¡¼¥Ö¥ë¤Ë³ÊǼ¤¹¤ë ***/
/ tk = strtok(pText,SEPARATOR);/*SEPARATOR¤Ë´Þ¤Þ¤ì¤ëʸ»ú¤ò¤ò\n¤È¤·¤ÆpText¤«¤éʸ»úÎó¤ò¼è¤ê½Ð¤¹¡£*/
while(tk)
{
*tk = tolower(*tk); /* Ƭʸ»ú¤ò¾®Ê¸»ú¤ËÊÑ´¹ */
pSearch = WordTbl;
while(pSearch->pWord)
{
if (!strcmpi(pSearch->pWord,tk))
{
break;
}
pSearch++;
}
pSearch->pWord = tk;
pSearch->Count++;
tk = strtok(NULL,SEPARATOR);
}
/*** phase 3 ¥½¡¼¥È ***/
pTbl = WordTbl; while((pTbl++)->pWord);
TblLen = pTbl - WordTbl - 1;
qsort(WordTbl,TblLen,sizeof(WORDINFO ),(COMP )Compare);
fp = fopen("Result.txt","w");
if (!fp)
{
return 0;
}
pTbl = WordTbl;
while(pTbl->pWord)
¡¡¡¡{
printf("%s ..... %d\n",pTbl->pWord,pTbl->Count);
fprintf(fp,"%s ..... %d\n",pTbl->pWord,pTbl->Count);
pTbl++;
}
fclose(fp);
/* Îΰè²òÊü */
free(pText);
return 1;
}
int Compare(PWORDINFO ptr1,PWORDINFO ptr2)
{
return strcmpi(ptr1->pWord,ptr2->pWord);
}
|