热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用java实现一道c笔试题

今天偶然在网上看到以前的一道笔试题目,大概是这样的:从文件text.in读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它

  今天偶然在网上看到以前的一道笔试题目,大概是这样的:从文件text.in读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.out中。

  该题目用c实现,主要思路是:用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出即可。

  c代码如下:

View Code

1 // asef.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include
6 #include
7 #include
8 #include <string.h>
9
10 #define SOURCE_FILE "text.in"
11 #define OUTPUT_FILE "word.out"
12 #define MAX_WORD_LEN 128
13
14 //树节点包括单词大小&#xff0c;出现次数
15 typedef struct treenode
16 {
17 char szWord[MAX_WORD_LEN]; //大小&#xff0c;最长为128
18 int nCount; //个数
19 struct treenode* pLeft;
20 struct treenode* pRight;
21 }BNODE;
22
23 int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen)
24 {
25 int result &#61; 0;
26 result &#61; fscanf(pFile, "%s", pasWordBuffer); //从流中格式化输入&#xff0c;若有&#xff0c;则返回1&#xff0c;若结束则返回0
27 if(EOF &#61;&#61; result || 0 &#61;&#61; result) //文件结尾
28 result &#61; 0;
29 else
30 result &#61; 1;
31
32 return result;
33 }
34
35 void binary_tree(BNODE** ppNode,char* pszWord)
36 {
37 BNODE* pCurrentNode &#61; NULL; //
38 BNODE* pMemoNode &#61; NULL; //
39 int nStrCmpRes &#61; 0; //
40
41 if(ppNode !&#61; NULL && pszWord !&#61; NULL)
42 {
43 // BNODE* pCurrentNode &#61; NULL;
44 // BNODE* pMemoNode &#61; NULL;
45 // int nStrCmpRes&#61;0;
46
47 pCurrentNode &#61; *ppNode; //____(1)_____
48
49 while(pCurrentNode)
50 {
51 /*寻找插入位置*/
52 nStrCmpRes &#61; strcmp(pszWord, pCurrentNode->szWord); //比较字符串
53
54 if(!nStrCmpRes)
55 {
56 pCurrentNode->nCount&#43;&#43;; //___(3)___
57
58 return;
59 }
60 else
61 {
62 pMemoNode&#61;pCurrentNode;// ___(4)___
63 pCurrentNode &#61; nStrCmpRes>0? pCurrentNode->pRight : pCurrentNode->pLeft;
64 }
65 }
66 }
67
68 pCurrentNode &#61; new BNODE;
69
70 if(pCurrentNode !&#61; NULL)
71 {
72 memset(pCurrentNode,0,sizeof(BNODE));
73 strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);
74 pCurrentNode->nCount&#61;1;
75 }
76
77 if(pMemoNode&#61;&#61;NULL)
78 {
79 *ppNode&#61; pCurrentNode; // ___(5)___
80 }
81 else if(nStrCmpRes>0)
82 {
83 pMemoNode->pRight&#61;pCurrentNode;
84 }
85 else
86 {
87 pMemoNode->pLeft&#61;pCurrentNode;
88 }
89 }
90
91 void midorder(FILE* pFile,BNODE* pNode)
92 {
93 if(!pNode||!pFile) return; //___(6)___
94
95 midorder(pFile,pNode->pLeft);
96 fprintf(pFile,"%s %d\n",pNode->szWord,pNode->nCount);
97 midorder(pFile,pNode->pRight);
98 }
99
100 void main()
101 {
102 FILE* pFile&#61;NULL;
103 BNODE* pRootNode&#61;NULL;
104 char szWord[MAX_WORD_LEN]&#61;{0};
105
106 pFile&#61;fopen(SOURCE_FILE,"r");
107
108 if(pFile&#61;&#61;NULL)
109 {
110 printf("Can&#39;t open file %s\n",SOURCE_FILE);
111 return;
112 }
113
114 while(getword(pFile,szWord,MAX_WORD_LEN) &#61;&#61; 1)
115 {
116 binary_tree(&pRootNode,szWord); // 生成二叉树
117 }
118
119 fclose(pFile);
120
121 pFile&#61;fopen(OUTPUT_FILE,"w");
122 midorder(pFile,pRootNode);
123 fclose(pFile);
124 }

 

  我用java实现&#xff0c;则同样需要读写文件&#xff0c;然后利用Map,单词为key,次数为value。。。map很方便啊&#xff0c;

  其中的关键点&#xff1a;

    1&#xff1a;读&#xff0c;写文件&#xff1b;

    2&#xff1a;修改Map&#xff1b;

  现附上Java源码&#xff1a;

  

View Code

1 package cn.com.test;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.PrintWriter;
6 import java.util.Iterator;
7 import java.util.Map;
8 import java.util.Scanner;
9 import java.util.Set;
10 import java.util.TreeMap;
11
12 public class test {
13
14 /**
15 * &#64;param args
16 * &#64;throws FileNotFoundException
17 */
18 public static void main(String[] args) throws FileNotFoundException {
19 // TODO Auto-generated method stub
20 //in 可以读取文件
21 Scanner in &#61; new Scanner(new File("text.in"));
22 //构造map
23 Map map &#61; new TreeMap();
24
25 while(in.hasNext())
26 {
27 //获取map的entrySet
28 Set entrySet &#61; map.entrySet();
29 //获取set的迭代器
30 Iterator i &#61; entrySet.iterator();
31 String temp &#61; in.next().toString();
32 boolean sign &#61; false;
33 while(i.hasNext())
34 {
35 Map.Entry entry &#61; (Map.Entry) i.next();
36 if(temp.equals(entry.getKey()))
37 {
38 int value &#61; Integer.parseInt(entry.getValue().toString())&#43;1;
39 entry.setValue(value);
40 sign &#61; true;
41 }
42 }
43 if(!sign)
44 {
45 map.put(temp, 1);
46 }
47 }
48 //关闭流
49 in.close();
50 Set entrySet &#61; map.entrySet();
51 Iterator i &#61; entrySet.iterator();
52 PrintWriter out &#61; new PrintWriter("word.out");
53 while(i.hasNext())
54 {
55 Map.Entry entry &#61; (Map.Entry)i.next();
56 System.out.println(entry.getKey()&#43;"&#61;&#61;&#61;&#61;&#61;&#61;&#61;"&#43;entry.getValue());
57 out.printf("%s %d\n",entry.getKey(),entry.getValue());
58 }
59 out.close();
60
61 }
62
63 }

 

 

这样&#xff0c;就用Java实现了该题目&#xff0c;欢迎各位同行指导&#xff0c;转载。

    

转:https://www.cnblogs.com/benshan/archive/2012/03/16/2400864.html



推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
菜鸟自学编程
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有