第三次作业(字符,单词统计)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三次作业(字符,单词统计)相关的知识,希望对你有一定的参考价值。

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

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

代码如下:

        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("\n");
            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("文件中字符,单词统计如下:\n");
    printf("单词数:%d,符号数:%d,空格数:%d\n", 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("\n");
            continue;
        }
        printf("%c", words[i]);
    }
    printf("谢谢使用");

}

 

以上是关于第三次作业(字符,单词统计)的主要内容,如果未能解决你的问题,请参考以下文章

第三次作业

第三次作业

第三次作业 统计与报告

第三次作业个人统计分析报告

第三次作业 统计分析报告

2017秋-软件工程第三次作业-第三周例行总结