⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 separatech.c

📁 统计输入文件的行数、空格数、元音字母数、辅音字母数、非空白字母数、非空的行数
💻 C
字号:
//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

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

void SeparateCharacters(FILE *fp);

int main(int argc, char *argv[])
{
        FILE *fp;

        if(argc != 2) {
            fprintf(stderr,"指定一个文件。\n");
            exit(1);
        }
        else if((fp = fopen(*(++argv),"rt")) == NULL) {
                fprintf(stderr,"打开文件 %s 错误!",*argv);
                exit(2);
            }
        SeparateCharacters(fp);
        fclose(fp);
        getch();
        return 0;
}
void SeparateCharacters(FILE *fp) {
/* 统计输入文件的行数、空格数、元音字母数、辅音字母数、非空白字母数、非空的行数。
 * */

    enum CharacterType  {LINE, SPACELINE, NOTSPACELINE, VOWEL,CONSONANT, SPACE, NOTSPACE,UNKWON};

    struct _count {
         char *name;
         int  num;
    }count[8] = {"line", 0, "spaceline", 0, "notspaceline", 0, "vowel", 0, "consonant", 0,
             "space", 0, "notspace", 0, "unkwon", 0};

    static int CharNumofLine;
    enum CharacterType p;
    int ch;

    while((ch = fgetc(fp)) != EOF)
        if(ch =='\n') {
            if(CharNumofLine ==0)
                count[SPACELINE].num++;
            else{
                CharNumofLine = 0;
                count[NOTSPACELINE].num++;
            }
            count[LINE].num++;
        }
        else {
            CharNumofLine++;
            if(ch == 'a' || ch == 'o' || ch == 'e' || ch == 'u'
             ||ch == 'A' || ch == 'B' || ch == 'E' || ch == 'U') {
                 count[NOTSPACE].num++;
                 count[VOWEL].num++;
            }
            else if(isalpha(ch)) {
                count[NOTSPACE].num++;
                count[CONSONANT].num++;
            }
            else if(ch == ' ')
                count[SPACE].num++;
            else if(!isspace(ch))
                count[NOTSPACE].num++;
            else
                 count[UNKWON].num++;   /* z正常情况下为 0 */
        }

    if(CharNumofLine != 0 && ch == EOF) {
         count[NOTSPACELINE].num++;
         count[LINE].num++; /* 把 EOF 所在的非空行也统计为一个行。*/
    }
    printf("统计结果如下:\n");
    for(p = LINE; p <= UNKWON; p++)
        printf("%15s: %5d\n",count[p].name, count[p].num);
}/* void SeparaterCharacters(int ch) */
//---------------------------------------------------------------------------
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -