zoukankan      html  css  js  c++  java
  • 第三次作业(字符,单词统计)

    题目要求:从文件中读取字符,然后统计字符的数目,和单词的数目。

    首先打开一个文件,对里面存的东西进行统计,刚开始判断是否为单词的组成部分:

    代码如下:

            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("
    ");
                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("文件中字符,单词统计如下:
    ");
        printf("单词数:%d,符号数:%d,空格数:%d
    ", 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("
    ");
                continue;
            }
            printf("%c", words[i]);
        }
        printf("谢谢使用");
    
    }
  • 相关阅读:
    float浮点型底层存储原理
    PermissionError: WinError
    django数据库设置sql_mode
    Git 之 git diff
    以太网数据格式与封装解封
    MYSQL进阶
    MYSQL基础
    Python连接MySQL数据库之pymysql模块使用
    Python装饰器进阶
    BootStrap框架
  • 原文地址:https://www.cnblogs.com/shenpfei/p/5312430.html
Copyright © 2011-2022 走看看