zoukankan      html  css  js  c++  java
  • 第三周作业--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中,遇到'
    '或者读取500个字符结束

    三.统计每行字符个数。

    int charcounter(char* con)//统计每行字符个数
    {
        int num = 0,i=0;
        for (i = 0; i < strlen(con); i++)
        {
            if (con[i] != '
    '&&con[i] != ' '&&con[i] != '	')
            {
                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] != '
    '&&con[i] != ' '&&con[i] != '	')
     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("请输入文件名
    ");
    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中,遇到'
    '或者读取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
  • 相关阅读:
    POJ1045 Bode Plot
    POJ1044 Date bugs
    POJ1043 What's In A Name?
    POJ1042 Gone Fishing
    POJ1041 John's trip
    POJ1040 Transportation
    POJ1039 Pipe
    background-size属性
    一些CSS的备忘
    only-child选择器
  • 原文地址:https://www.cnblogs.com/liumengdi/p/5311405.html
Copyright © 2011-2022 走看看