wordcount程序中的應用與拓展

設計思路:編程

      關鍵是思路,首先知道 單詞, 行,字符, 他們有什麼特色: 一、單詞,標準的是遇到空格後,單詞數,自動加一。 二、行是以\n結束的, 也就是說, 遇到\n行數加一,固然也視你的操做系統而言。三、字符, 空格是否記在裏面? 等因素須要考慮。因此這就要求咱們將文件讀入,逐字檢測,檢測到空格單詞數加一,檢測到回車行數單詞數加一,若是既不是回車也不是空格則說明是字符,字符數加一 編程時發現的問題: 以上思路針對的是正常輸入的文本,實際輸入時還會出現種種特殊狀況。 1.在一行結束時(換行符以前)出現空格,也就是文本後面加一個空格再按回車,這種狀況會致使單詞數多1。 2.文本結束時沒有按下回車,會致使行數和單詞數少1。 3.連續出現幾個空格,也會致使單詞數增多。函數

      在本次試驗中我在查資料是發現,由於不一樣的平臺對文本文件換行的處理不同,Linux以'\n'爲換行符,Windows以'\n\r'爲換行符,Mac又以'\r\n'爲換行符。因此,使用getc()函數處理換行時比較麻煩,因而我便學習網上」大牛「們,創建緩衝區,fgets()函數用於從文件中讀取一行或指定個數的字符,其原型爲:char * fgets(char *buffer, int size, FILE * stream);學習

      因此在每一行便進行一次結果統計,最後,將結果統計相加。buffer爲緩衝區,用來保存讀取到的數據。size爲要讀取的字符的個數。若是該行字符數大於size-1,則讀到 size-1 個字符時結束,並在最後補充' \0';若是該行字符數小於等於 size-1,則讀取全部字符,並在最後補充 '\0'。即,每次最多讀取 size-1 個字符。讀取的字符包括換行符。stream爲文件指針。spa

     首先是打開文件fopen(打開文件)相關函數open,fclose表頭文件#include<stdio.h>定義函數FILE * fopen(const char * path,const char * mode);參數path字符串包含欲打開的文件路徑及文件名,參數mode字符串則表明着流形態。
mode有下列幾種形態字符串:
r 打開只讀文件,該文件必須存在。
r+ 打開可讀寫的文件,該文件必須存在。
w 打開只寫文件,若文件存在則文件長度清爲0,即該文件內容會消失。若文件不存在則創建該文件
操作系統

    if( (fp=fopen(filename, "rb")) == NULL ){
        perror(filename);
        return NULL;
    }

 

對於perror函數名  功  能: 系統錯誤信息  用  法: void perror(char *string);
程序例:.net

#include <stdio.h>

int main(void)
{
   FILE *fp;

   fp = fopen("perror.dat", "r");
   if (!fp)
      perror("Unable to open file for reading");
   return 0;
}

       在每一行便進行一次結果統計,最後,將結果統計相加。buffer爲緩衝區,用來保存讀取到的數據。size爲要讀取的字符的個數。若是該行字符數大於size-1,則讀到 size-1 個字符時結束,並在最後補充' \0';若是該行字符數小於等於 size-1,則讀取全部字符,並在最後補充 '\0'設計

    for(i=0; i<len; i++){
            c = buffer[i];
            if( c==' ' || c=='\t'){ 
                !blank && wNum++; 
                blank = 1;
            }else if(c!='\n'&&c!='\r'){  
                cNum++;
                blank = 0;
            }
        }

 

對於不是空格單詞數+1指針

        !blank && wNum++;  
  EOF只是爲了標識已經讀到文件末尾,它並非一個存儲在文件中的字節。因此在判斷文件是否讀完時不能直接判斷(fgetc()==EOF)
而是要賦值以後再進行判斷
int c;
c = getc(fp);
    while (c != EOF)
    {
        
        printf("%c", c);
        c = fgetc(fp);
    }

 

 

最後輸出
程序代碼已上傳至coding.netcode

相關文章
相關標籤/搜索