題目要求:從檔案中讀取字元,然後統計字元的數目,和單詞的數目。
首先打開一個檔案,對裡面存的東西進行統計,剛開始判斷是否為單詞的組成部分:
代碼如下:
FILE *fp;//檔案指針
char c; //檔案字元讀取存儲
fp = fopen("D:\\a\\a.txt", "r");
if (fp == NULL)
{
printf("檔案打開失敗");
return 0;
}
while (feof(fp) != 1)
{
c = fgetc(fp);
if (isalnum(c) != 0 || c == '_' || c == '.')
{
Word(fp);
words[wordnum] = c;
wordnum++;
}
else if (c == ' ')
{
space++;
}
else
{
character++;
}
}
如果是單詞的組成部分之一,那麼函數跳入單詞判斷函數word()中,且将檔案指針傳進去,且該字元存入單詞存儲的數組中,
word()函數如下:
int Word(char *f)
{
char c;
while (feof(f) != 1)
{
c = fgetc(f);
if (isalnum(c) != 0 || c == '_' || c == '.')
{
character++;
words[wordnum] = c;
wordnum++;
}
else if (c == ' ')
{
space++;
word++;
words[wordnum] = ' ';
wordnum++;
return 1;
}
else
{
word++;
words[wordnum] = ' ';
wordnum++;
return 1;
}
}
}
當檔案沒有結束時,判斷指針所指向的字元是否為單詞的組成部分,如果是字元數加一,該字元存入單詞數組中;如果是空格,空格字元數加一,字元數加一,單詞數加一,在單詞數組中存入一個空格字元;如果是其他字元,字元數加一,單詞數加一,在單詞數組中存入一個空格字元。傳回主函數。
輸出結果示例:
然後是單詞輸出,函數如下:
int show()
{
int a;
for (int i = 0; i < wordnum - 1; i++)
{
if (words[i] == ' ')
{
printf("\n");
continue;
}
printf("%c", words[i]);
}
printf("謝謝使用");
}
當數組中元素是空格時,說明是一個單詞結束了,如果是,輸出回車,且用continue跳出本次循環,
作業感想:
這個程式并不是太難,主要是用到有關檔案的知識,開始的時候感覺比較煩,因為要寫檔案,但是當寫完程式時,看着自己程式運作時感到非常高興,以前的我不怎麼願意用檔案,有時候都是用大的數組,或者是結構體進行存儲,但是突然發現寫檔案的代碼挺好玩的,比較有意思,以後還要多多練習,尤其是自己不太喜歡的地方。
總代碼:
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int character = 0;//字元數
int word = 0;//單詞數
int space = 0;//空格數
char words[1000];//單詞存儲
int wordnum = 0;//單詞存儲的數組位置
int Word(char *f);//檢驗是否為單詞
int show();//顯示單詞
int main()
{
int choice;//選擇的輸入
FILE *fp;//檔案指針
char c; //檔案字元讀取存儲
fp = fopen("D:\\a\\a.txt", "r");
if (fp == NULL)
{
printf("檔案打開失敗");
return 0;
}
while (feof(fp) != 1)
{
c = fgetc(fp);
if (isalnum(c) != 0 || c == '_' || c == '.')
{
Word(fp);
words[wordnum] = c;
wordnum++;
}
else if (c == ' ')
{
space++;
}
else
{
character++;
}
}
printf("檔案中字元,單詞統計如下:\n");
printf("單詞數:%d,符号數:%d,空格數:%d\n", word, character, space);
fclose(fp);
printf("檢視單詞請按1,否則請按任意鍵");
scanf_s("%d", &choice);
if (choice == 1)
{
show();
}
else
return 1;
}
int Word(char *f)
{
char c;
while (feof(f) != 1)
{
c = fgetc(f);
if (isalnum(c) != 0 || c == '_' || c == '.')
{
character++;
words[wordnum] = c;
wordnum++;
}
else if (c == ' ')
{
space++;
word++;
words[wordnum] = ' ';
wordnum++;
return 1;
}
else
{
word++;
words[wordnum] = ' ';
wordnum++;
return 1;
}
}
}
int show()
{
int a;
for (int i = 0; i < wordnum -1; i++)
{
if (words[i] == ' ')
{
printf("\n");
continue;
}
printf("%c", words[i]);
}
printf("謝謝使用");
}