初级-文件操作与字符处理

1109 综合实验:文件操作与字符处理 【SCAU 模拟哈希 清一流的算法思路】 Description 在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件, 其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数, 并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出, 不足5个单词时,按序输出全部单词)。程序中注意如下细节:... 阅读详情

第三篇

一.先贴题目
1109 综合实验:文件操作与字符处理

在当前目录中存在文件名为”case1.in”(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件,
其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数,
并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出,
不足5个单词时,按序输出全部单词)。程序中注意如下细节:
(1) 空格、标点符号与回车符起到分隔单词的作用。
(2) 文章一行的末尾可能有连字符,出现连字符时,该行最末的字符串与下行最先出现的字符串构一个单词;
(3) 名词缩写算一个单词;
(4) 数字不算单词;
(5) 单词不区分大小写;
(6) 输出时单词全使用小写;


#include "stdio.h" 
#include "math.h" 
#include "string.h" 
#include "stdlib.h" 

_______________________ 

main() 
{ 
         _______________________ 
} 

输入格式
文件case1.in中一篇英文文章,包含多段文字,单词数不超过10000,每个单词不超过20个字符

输出格式
按题意输出答案

输入样例
(如case1.in内容如下)
I am a student. My school is SCAU. It is a beau-
tiful university. I like it.

输出样例
a 2
i 2
is 2
it 2
am 1

二.思路分析
这是比较接近于最近写的一个实验题,也是第一个实验题。这道题的要求比较多,从题目的EOF开始,说明用fgetc 函数来读取文件好一点,一开始是用fgets来做,多设置了一个变量来存储有n行,但是还不如用fgetc,反正基本操作都差不多,少一个变量,也少一点思考量。
这道题大概要分成几个步骤或者说模块:

  1. 先 分离出单词来。
  2. 统计所有单词的全部出现个数(包括重复的也统计),用sum[i]存起来
  3. 去除掉同样的单词的个数并置为0
  4. 将单词为空串的个数置为0
  5. 对全部,排sum[i]序,把大的放在前面
  6. 找的非0的sum[i],那样就能知道总共有几个非0的有效的唯一单词的个数
  7. 再来对全部,将sum[i]相同的单词按序来排
  8. 按照题目条件,如果有效的唯一单词的个数大于等于5,就输出前5的word[i] 和sum[i];如果小于5就全部输出。

三。具体代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    FILE *fp = fopen("case1.in","r");
    char ch;
    char word[50100][21];
      //这里设置的单词数组的大小要较大于10000,
    int i=0; 
    int j=0;
    int t,k;
    int g;
    int sum[10100]={0};
    int nozerolen;  //代表非0的唯一单词的个数
    int wordsum;    //代表单词的全部个数
    /*
          分离单词
    */
    while((ch=fgetc(fp))!=EOF)
    {
        if(ch<='Z'&&ch>='A')
            ch+=32;
        if(ch =='-')
        {
            ch = fgetc(fp);
            if(ch=='\n')
                continue;
            else
            {
                i++;
                j=0;
                //continue;
            }
            /*
            - 的情况比较多样,如果-后是\n 那么就和前面的是同一个单词,跳过就好,如果-后是其他东西,那就再开下一个单词来存,同时不忘记将j重置为0.
            */
        }
        if(ch=='\n')
            continue;
           //回车不作为分离单词的因素。
        if(ch==' '||ch==','||ch=='='||ch=='.')
        {
            i++;
            j=0;
            continue;
            /*
            其中 = . , ‘ ’作为分离单词的四大符号。
            */
        }
        if(ch>='0'&&ch<='9')
        {
            continue;
            //数字不作为单词的成分
        }
        word[i][j++]=ch;
        //利用二维数组来存取字符
    }
    wordsum = i;
    //获取单词的个数
    wordsum++;
    //由于从0开始,转化为常规操作从1开始数的 因此变大一个。

/*
统计所有出现的单词的出现的次数,即便重复也同样统计。
*/
    for(t=0;t<wordsum;t++)
    {
        for(k=0;k<wordsum;k++)
        {
            if(strcmp(word[t],word[k])==0)
            {
                sum[t]++;
            }
        }
    }
    /*
    对于单词一样的其他单词将它们的单词出现次数置成0.
    */
    for(t=0;t<wordsum-1;t++)
    {
        for(k=t+1;k<wordsum;k++)
        {
            if(strcmp(word[t],word[k])==0)
            {
                sum[k]=0;
            }
        }
    }
    //将空串置成0
    for(i=0;i<wordsum;i++)
    {
        if(strlen(word[i])==0)
        {
            sum[i] =0;
        }
    }

      /*
     进行冒泡排序,对于全部单词,从大到小进行排序。
     这里注意在替换单词出现次数的时候,要将单词也一起替换。
     */
    for(t=0;t<wordsum-1;t++)
    {
        for(k=0;k<wordsum-1-t;k++)
        {
            if(sum[k]<sum[k+1])
            {
                int temp;
                temp = sum[k+1];
                sum[k+1] = sum[k];
                sum[k] = temp;
                char tt[30];
                strcpy(tt,word[k+1]);
                strcpy(word[k+1],word[k]);
                strcpy(word[k],tt);
            }
        }
    }

    /*
     计算出非0的唯一单词的个数。
    */
    for(t=0;t<wordsum;t++)
    {
        if(sum[t]==0)
        {
            break;
        }
    }
    nozerolen = t+1;    //也是一样转化为常规的从1开始计算
/*
再对全部非0的单词数来排序,针对于 那些sum相同的但序在后的,排成同sum序在前
*/
    for(t=0;t<nozerolen-1;t++)
    {
        for(k=0;k<nozerolen-1-t;k++)
        {
            if(sum[k]==sum[k+1]&&strcmp(word[k],word[k+1])>0)
            {
                int temp;
                temp = sum[k+1];
                sum[k+1] = sum[k];
                sum[k] = temp;
                char tt[30];
                strcpy(tt,word[k+1]);
                strcpy(word[k+1],word[k]);
                strcpy(word[k],tt);
            }
        }
    }
 /*
按题目要求的,非0数大于5,就输出前5,如果小于5,就输出全部。
*/
    if(nozerolen<5)
    {
        for(g=0;g<nozerolen;g++)
        {
            printf("%s %d\n",word[g],sum[g]);
        }
    }
    else
    {
        for(t=0;t<5;t++)
        printf("%s %d\n",word[t],sum[t]);
    }
    fclose(fp);
}

四.总结反思
其实感觉这道题,还是没做好,因为只是处理了 ‘=’这种特殊情况,可是实际上还可以是其他的特殊字符。还有就是在分离单词那一块,实际上由于,空格并非能全部适用于全部的分离单词的情况,所以会读取到一些空串,才有后面的将空串置0的操作。这道题感觉最复杂的是分离出单词来,其他的就是一些操作,比如统计全部单词出现的次数,再对于出现过的单词的sum[i]置成0,然后是将空串的sum[i]置成0,再排sum[i]的序,再统计非0的个数,再排让sum同序前的 在前,最后就是按要求输出了。分离单词这一块应该可以再细分出一些情况,让空格转变成可以用来分隔单词的标志,也可以不是,这样就不会读到空串,在数组设置的时候也可以小一些。

初级程序员考试大纲    一、考试说明   1、考试要求   (1)熟练掌握DOS、Windows95、Word和上网软件的使用方法,以及有关基础知识;   (2)掌握程序编制方法,用C语言编制简单程序;   (3)掌握基本数据结构、程序语言和操作系统的基本知识;   (4)了解数据库和信息安全的基础知识;   (5)掌握数制、机内代码和逻辑运算的基础知识;   阅读详情

相关推荐

文件操作与字符处理的例子

文件操作与字符处理文件操作与字符处理文件操作与字符处理

SCAU 1109(综合实验:文件操作与字符处理)利用链表

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef struct WordNo{ char Word[40]; int time; struct WordNo* next; }*WORD,word_node; int main() { FILE* fp; fp = fopen("case1.in", "r");//只读 .

彼岸的博客 1248

文件操作与字符处理

在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件,其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数,并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出,不足5个单词时,按序输出全部单词)。程序中注意如下细节: (1) 空格、标点符号与回车符起到分隔单词的作用。 (2) 文章一行的末尾可能有连字符,出现连字符时,该行最末的字符串与下行最先出现的字符串构一个单词; (3) 名词缩写算一个单词; (4) 数字不算单词; (5) 单词不区分大小写; (6) 输出时单词全使用小写;

SCAU 1109(综合实验:文件操作与字符处理)

Description 在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件, 其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数, 并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出, 不足5个单词时,按序输出全部单词)。程序中注意如下细节: (1) 空格、标点符号与回车符起到分隔单词的作用。 (2) 文章一行的末尾可能有连字符,出现连字符时,该行

qq_53341423的博客 3945

C语言综合性实验a:文件操作与字符处理.zip

在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件, 其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数, 并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出, 不足5个单词时,按序输出全部单词)。程序中注意如下细节: (1) 空格、标点符号与回车符起到分隔单词的作用。 (2) 文章一行的末尾可能有连字符,出现连字符时,该行最末的字符串与下行最先出现的字符串构一个单词; (3) 名词缩写算一个单词; (4) 数字不算单词; (5) 单词不区分大小写; (6) 输出时单词全使用小写;

c语言综合实验

&lt;html&gt; &lt;body&gt; <pre> <h1>Build Log</h1> <h3> --------------------Configuration: 综合性实验程序 - Win32 Debug-------------------- </h3> <h3>Command Lines</h3> Creating temporary file "C:\Users\Silence\AppData\Local\Temp\RSP788E.tmp" with contents [ /nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/综合性实验程序.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c "C:\Users\Silence\Documents\综合性实验\3、mian program\3、main program.cpp" ] Creating command line "cl.exe @C:\Users\Silence\AppData\Local\Temp\RSP788E.tmp" <h3>Output Window</h3> Compiling... 3、main program.cpp C:\Users\Silence\Documents\综合性实验\3、mian program\3、main program.cpp(8) : error C2065: 'outtextxy' : undeclared identifier C:\Users\Silence\Documents\综合性实验\3、mian program\3、main program.cpp(13) : error C2065: 'drawmenu' : undeclared identifier

1109 综合实验:文件操作与字符处理 SCAU

1109 综合实验:文件操作与字符处理 SCAU 题目描述 Description 在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件, 其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数, 并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出, 不足5个单词时,按序输出全部单词)。程序中注意如下细节: (1) 空格、标点符号与回车符起到分隔单词的作用

Tree_sea的博客 1873

字母 大小写 判 断

字母大小写判断字母大小写判断字母大小写判断字母大小写判断

c语言只读文件字母,【c语言:文件操作与字符处理1109文件操作与字符处理1.题目及题目分析1.1问题描述在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会...

#include#includestructwordkeep{charc[20];intnum;}word[10000];intmain(){FILE*fp;fp=fopen("case1.in","r");charw[20],ch;inti,m,j,k,t,f;m=1;i=j=k=t=f=0;while((ch=fgetc(fp))!=...

weixin_32159633的博客 615

智能枕头

睡觉和吃饭是一样重要的,一个人想要健康的体魄,不仅要饮食得当,更需要有一个好的睡眠质量。随着人们生活品质的提高,人们对于睡眠的要求越来越高,那么就非常需要一款舒适的枕头。为了适应市场的需求,我爱物联网推出了智能枕头。因为智能枕头可以给头部及颈椎一个良好的承托力,舒适、柔软、放松,让人更好的进入睡眠。 目录 一、智能枕头方案介绍 二、智能枕头的优点 三、智能枕头功能介绍 四、智能枕头APP开发 五、...

6108我爱物联网方案开发优快云博客 3659

五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器

本系列文章主要介绍如何在工程实践中使用卡尔曼滤波器,分五个小节介绍: 一.卡尔曼滤波器开发实践之一: 五大公式 二.卡尔曼滤波器开发实践之二: 一个简单的位置估计卡尔曼滤波器 三.卡尔曼滤波器(EKF)开发实践之三: 基于三个传感器的海拔高度数据融合 四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解 五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器 也就是本文 ...

okgwf的博客 4138

计算机软件考试初级什么好考,初级程序员好考吗

初级程序员相对来说好考,初级程序员考试内容大多都是基础知识点,考试范围固定,只要考生把基础吃透通过初级程序员考试的概率就会很大。初级程序员是指通过初级程序员考试认证的计算机从业者。初级程序员考试属于中国计算机软件专业技术资格和水平考试的一个初级考试。初级程序员考试范围(一)基础知识1.1软件基础知识1.1.1基本数据结构数组、纪录、列表、队列、栈(stack)的定义、存储和操作1.1.2程序语言基...

weixin_28999575的博客 1731

FPGA实战:MIG IP核AXI接口DDR3读写优化指南

本文详细解析了FPGA中MIG IP核AXI接口的DDR3读写优化策略,涵盖关键参数配置、突发传输技巧及时序收敛方案。通过AXI接口优化和突发长度选择,可实现高达12.8GB/s的理论带宽,提升DDR3访问效率。文章还提供了Vivado配置实例和调试技巧,助力开发者解决FPGA内存控制中的实际问题。

weixin_29168393的博客 546

初级程序员考试大纲 (转)

初级程序员考试大纲 (转)[@more@]   一、考试说明   1、考试要求   (1)熟练掌握DOS、windows95、word和上网软件的使用方法,以及有关基础知识;   (2)掌握程序编制方法,...

circularr9834的博客 1167

激光可燃气体传感器:核心技术环节分析

激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字)

上市公司前技术负责人,20 年软硬件深耕 + 百人研发团队管理经验,名校理工科背景加持。从技术攻坚到团队掌舵,沉淀海量项目实战与管理心得,专注分享软硬件干货、疑难问题解决方案,既是靠谱知识传播者,也盼链接优质项目共成长。 1042

基于STM32设计的智能门锁(微信小程序+手机APP等多种方式开锁)(188)

当前智能门锁项目是基于STM32微控制器、ESP8266-WIFI模块、OLED显示屏、指纹模块、蓝牙模块、门禁刷卡模块、烟雾检测模块、火光检测模块、温湿度检测模块等硬件设备开发的一种智能门锁系统

1万+

C语言编程入门:数值比较、字母转换与阶乘计算实战解析

在计算机编程中,结构化程序设计是构建可靠软件的基础,其核心依赖于顺序、选择和循环三大控制结构。顺序结构确保指令按序执行,选择结构通过条件判断实现程序分支,而循环结构则能高效处理重复性任务。这些基础逻辑共同构成了算法实现的骨架,对于提升代码效率和解决复杂问题至关重要。在C语言实践中,数值比较程序是选择结构的典型应用,通过if-else语句实现条件分支;字母转换程序则基于ASCII码原理,揭示了字符在内存中的数字本质;阶乘计算程序则深入展示了循环与递归两种实现方式,是理解迭代与函数自我调用的经典案例。本文通过这

weixin_33826609的博客 360

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5504

2025最值得练的10个Python项目:从入门到实战的蜕变指南

你还在为Python学习停留在理论层面而烦恼吗?面对海量项目教程却不知如何选择?本文精选10个梯度分明的Python实战项目,覆盖基础语法、实用工具到AI应用,帮你系统性提升编码能力,30天内完成从新手到能手的蜕变。读完本文你将获得:分阶段学习路径图、5类核心场景解决方案、可直接复用的项目模板以及社区贡献指南。 ## 项目分级学习体系 项目按开发者技能水平分为三个梯队,每个梯队对应不同学习阶段...

gitblog_00813的博客 444

25、格式化字符串攻击全解析

本文深入解析了格式化字符串攻击的原理与利用方式,涵盖缓冲区溢出与格式化字符串漏洞的区别,详细介绍了printf函数的工作机制、常见格式化说明符及其安全隐患。文章分析了三类典型编程错误导致的漏洞,并展示了如何通过恶意格式化字符串实现拒绝服务、内存读取和写入攻击。同时,提供了有效的防御措施,包括输入验证、使用安全函数、避免直接使用用户输入作为格式化字符串以及启用编译器安全选项,帮助开发者防范此类高危漏洞。

beer8的博客 83

使用Qt和MX Component插件实现与菱PLC的通信

在本文中,我们介绍了如何使用Qt和MX Component插件实现与菱PLC的通信。我们首先安装和配置了MX Component插件,并在Qt项目中初始化和使用MX Component来连接、读取和写入PLC的数据。安装完成后,您需要在Qt项目中配置MX Component的路径,以便Qt可以找到所需的库文件。在本文中,我们将探讨如何使用Qt和MX Component插件来实现与菱PLC的通信。在主函数中,我们将初始化MX Component,并创建一个与PLC通信的示例。在上面的代码中,我们使用了。

TlScratch的博客 996

[C/C++]_[初级]_[标准库之几种算法库函数的运用,如字符串查找(字符个数查找)、分隔、删除、替换、排序、字符交换位置、大小写转换等等]

场景:在处理一些复杂的字符时候,我们要对其进行相应的处理才能得到我们想要的结果,包括:文件目录的提取,文件后缀的提取,提取某一个范围内的字符串,不符合规则字符的删除和替换等等。 // test_arithmetic.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include //必须加上 #include #include

moqj_123的专栏 1014

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C#编程兵书

《C#编程兵书》 基本信息 作者: 张志强 胡君 丛书名: 程序员藏经阁 出版社:电子工业出版社 ISBN:9787121207402 上架时间:2013-8-26 出版日期:2013 年9月 开本:16开 页码:508 版次:1-1 所属分类:计算机 &gt; 软件与程序设计 &gt; C# 更多关于 》》》《C#编程兵书》 内容简介 计算机书籍   《c#编程...

weixin_33963594的博客 141

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 初级统计单词个数
下一篇: 水仙花数
Tket
博客等级 码龄9年 21粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值