假設文件中的單詞都是字母的組合,且單詞間用空格或者“."區分。
實驗環境:Dev-C++
#include<stdio.h>
#include<stdlib.h>int main(){FILE *fp;int i;int fr;long fsize;int word=0;int sum=0;char filename[20];char *buffer;printf("要檢查的文件:");scanf("%s",filename);fp=fopen(filename,"rb");if(!fp){perror("fp:");exit(0);}fseek(fp,0,SEEK_END);/*int fseek(FILE*stream,long offset,int fromwhere);參數:stream:FILE類型指針;offset 整數類型參數;fromwhere:文件頭0(SEEK_SET),當前位置1(SEEK_CUR), 文件尾2(SEEK_END) ;取值0-2; 功能:設置文件指針stream的位置返回:成功:stream將指向以fromwhere為基準,偏移offset個字節的位置,函數返回0失敗:不改變stream的指向的位置,函數返回一個非0值 */fsize=ftell(fp);/*long ftell(FILE *stream);功能:返回文件位置指針當前位置相對于文件首的偏移字節數 */ rewind(fp);/*void rewind(FILE *stream);功能:將文件位置指針重新指向文件開頭 */ buffer=(char*)malloc((1+fsize)*sizeof(char));/*extern void *malloc(unsigned int num_bytes);頭文件:#include<stdlin.h>或者#include<malloc.h>功能:向系統申請分配一個長度為num_butes個字節的內存塊 */ if(!buffer){perror("mallocc:");exit(0);}fr=fread(buffer,1,fsize,fp);/*size_t fread(void *buffer,size_t size,size_t count,FILE *stream);功能:從文件流中讀數據,最多讀count項,每個項size個字節返回:成功:返回實際讀取到的項個數失敗:返回0 size_t fwrite(const void*buffer,size_t size,size_t count,FILE *stream);功能:向指定的文件寫數據,寫count項,每項size個字節返回:成功:返回實際寫入的數據塊數目該函數以二進制形式對文件進行操作,不局限與文本文件 */ if(fr==0){perror("fread:");exit(0);}buffer[fsize]='\0';for(i=0;i<fsize;i++){if(buffer[i]==' '||buffer[i]=='.')word=0;else if(word==0){word=1;sum++;}}printf("該文件中共有%d個單詞\n",sum);return 0;
}
歡迎留言交流