lmdi

导航

第三周作业--Word Counter

需求分析:

1.写出一个程序,模仿wc.exe,通过输入文件名,实现文件内容读取;

2.统计出文件内容的总字符数、总单词数、行数、每行字符数、每行单词数。

 

代码分析:

一.打开文件。

    FILE *fp;
    char filename[100], con[500];
    gets(filename);//读取文件名
    if ((fp = fopen(filename, "r")) == NULL)
    {
        printf("无法打开该文件!");
        return;//用exit(0)报错,后修正为return
    }

 

二.读取文件。

fgets(con, 500, fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束

 

三.统计每行字符个数。

int charcounter(char* con)//统计每行字符个数
{
    int num = 0,i=0;
    for (i = 0; i < strlen(con); i++)
    {
        if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t')
        {
            num++;
        }
    }
    return num;
}

 

四.统计每行是否为空行,利用返回值是否为真,计算有效行数。

bool linenum(char* con)//判断每行是否为空行
{
    if (charcounter(con) != 0)
        return true;
    return false;
}

 

五.计算每行的单词个数。

int wordnum(char* con)//计算单词数
{
    int n = 0, i;
    for (i = 0; i < strlen(con); i++)
    {
        if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母
        {
            while (i<strlen(con))
            {
                if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '0' &&con[i] <= '9')))//首字母后的字符不为字母、数字、下划线、小数点时
                {
                    n++;
                    break;
                }
                i++;
            }
        }
    }
    return n;
}

 

六.计算总字符数,调用子函数charcounter(con)。

connum = connum + charcounter(con);

 

七.计算总单词数,调用子函数wordnum(con)。

wordn = wordn + wordnum(con);

 

源程序运行效果图如下:

源码已上传coding。如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int charcounter(char* con)//统计每行字符个数
 4 {
 5     int num = 0,i=0;
 6     for (i = 0; i < strlen(con); i++)
 7     {
 8         if (con[i] != '\n'&&con[i] != ' '&&con[i] != '\t')
 9         {
10             num++;
11         }
12     }
13     return num;
14 }
15 bool linenum(char* con)//判断每行是否为空行
16 {
17     if (charcounter(con) != 0)
18         return true;
19     return false;
20 }
21 
22 int wordnum(char* con)//计算单词数
23 {
24     int n = 0, i;
25     for (i = 0; i < strlen(con); i++)
26     {
27         if ((con[i]>'a'&&con[i]<'z')||(con[i]>'A'&&con[i]<'Z'))//单词的第一个字符为字母
28         {
29             while (i<strlen(con))
30             {
31                 if (!((con[i] >= 'a'&&con[i] <= 'z') || (con[i] >= 'A'&&con[i] <= 'Z') || con[i] == '.'|| con[i] == '_' || (con[i] >= '0' &&con[i] <= '9')))//首字母后的字符不为字母、数字、下划线、小数点时
32                 {
33                     n++;
34                     break;
35                 }
36                 i++;
37             }
38         }
39     }
40     return n;
41 }
42 void main()
43 {
44     FILE *fp;
45     int connum=0,m=0,wordn=0;
46     char filename[100], con[500];
47     printf("请输入文件名\n");
48     gets(filename);//读取文件名
49     if ((fp = fopen(filename, "r")) == NULL)
50     {
51         printf("无法打开该文件!");
52         return;//用exit(0)报错,后修正为return
53     }
54     int i = 1;
55     while (!feof(fp))
56     {
57         printf("第%d行 ", i);
58         i++;
59         fgets(con, 500, fp);//将文件中的内容读取到con中,遇到'\n'或者读取500个字符结束 
60         printf("%d个字符", charcounter(con));
61         printf("%d个单词", wordnum(con));
62         puts(con);
63         connum = connum + charcounter(con);
64         wordn = wordn + wordnum(con);
65         if (linenum(con))
66             m++;
67     }
68     printf("---以上共有%d行(除空行外),共有%d个字符.", m, connum);
69     printf("共有%d个单词", wordn);
70     gets(con);
71     fclose(fp);
72 }
View Code

 

posted on 2016-03-23 15:36  lmdi  阅读(212)  评论(1编辑  收藏  举报