📄 separatech.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 + -