统计文件中单词、字符数

【问题描述】写一个统计文件中单词和字符个数的程序。在此,单词指的是仅由字母组成的串。诸如is7years这样的串按照两个单词计算。
【输入形式】读取当前目录下文件in.txt,以统计该文件中单词和字符个数。
【输出形式】输出输入文件中单词和字符个数,中间以一个空格分隔。
【样例输入】in.txt的内容为:
I am an (BeiHang)student.
【样例输出】5 25
【样例说明】该输入文件中共有5个单词(即I, am, an, BeiHang, student)及25个字符。

C++代码如下(新手编程,大佬勿喷):

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream fp("in.txt");
    char ch;
    int character=0,word=0;
    int flag=0;
    while((ch=fp.get())!=EOF)
    {
        character++;
        if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
        {
            flag=1;
        }
        else
        {
            if(flag==1)
            {
            word++;
            flag=0;
            }
        }
    }
    if(flag==1)
    {
       word++;
    }
    cout<<word<<" "<<character;
    fp.close();
    return 0;
}

C 代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    fp=fopen("in.txt","r+");
    int character=0,word=0;
    int flag=0;
    char ch;
    while((ch=fgetc(fp))!=EOF)
    {
        character++;
        if((ch>='a'&&ch<='z')||ch>='A'&&ch<='Z')
        {
            flag=1;
        }
        else
        {
            if(flag==1)
            {
                word++;
                flag=0;
            }
        }
    }
    if(flag==1)
    {
        word++;
    }
    fclose(fp);
    printf("%d %d",word,character);
    return 0;
}


注解:主要是读取文件的方式不同。

Java代码示例:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class Main {
	 public static void main(String[] args) throws IOException {
	     BufferedReader ifile = new BufferedReader(new FileReader("in.txt"));
		 String s=null;
		 int character=0,word=0;
		 int flag=0;
		 while((s=ifile.readLine())!=null) {
			 for(int i=0;i<s.length();i++) {
				 character++;
				 char ch = s.charAt(i);
				 if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) {
					 flag=1;
				 }else {
					 if(flag==1) {
						 word++;
						 flag=0;
					 }
				 }
			 }
		 }
		 if(flag==1) word++;
		 System.out.println(word+" "+character);
	     ifile.close();
	}
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题描述 设计C++类,使其能够统计文本文件字符个数,在终端显示结果,并将结果保存到定的文件。需要统计字符有:a、英文字母b、英文单词从c、字符(包括标点符号)d、行总e、其他字符(包括英文标点、空白符等)。 问题分析 从问题描述可以看到,我们所要做的就是将一篇文章(txt格式,字符格式为ANSI)出现的英文字符出现的次进行统计。而一篇文本文件出现的字符种类和顺序没有规律,如何对当前读取的字符的种类进行判断并转入到相应的统计状态成为了问题的关键。 但是,我们知道对于英文字母其ASCII码范围在65~90和97~122两个区间,而英文单词的判断就是在相邻两个非英文字母之间夹着一英文字母,所以我们可以在读取了第一个非英文字母后判断下一个读取的是否为英文字母,如果是便转入英文字符的处理状态,其可同时对字母个数进行统计,在读到非英文字符时退出该状态,并将英文单词加1,然后转入“状态转换心”进行状态转换的判断。 同理,对于字符的处理,也同上所述。但是由于字符占两个字节,而且各个编码格式字符的编码范围不一致,所以处理起来比较麻烦,但是原理是一致的。在本例对ANSI格式的编码进行处理,所以字符每个字节的范围为0x80~0xff,不过在实际操作发现有些字符还是被漏掉了,应该是字符的编码范围并没有全部包括进去的原因。
此为学习版,请勿用于商业用途或扩散。 以下描述转至互联网。 ============== 一、CSW分词组件简介 CSW文分词组件,是一套可自动将一段文本按常规汉语词组进行拆分,并以定方式进行分隔的COM组件。本组件采用独有的高效的分词引擎及拆分算法,具有准确、高速、资源占用率小等特点。为了满足客户对文本语义进行研究分析的需要,本组件同时提供词性及词频标注功能,可根据用户要求,对其拆分后的词组进行词性标注或词频标注。互联网信息检索、据库信息查询、智能聊天机器人、文本校对、自动翻译、 自动摘要、自动分类及信息加工处理等各个领域。 二、本组件特点: 1.适应性强 本组全部件采用ANSI标准C++开发,可广泛应用于当今的操作系统平台上,如:MS Windows、Linux及其它各公司出品的Unix操作系统。 2. 支持范围广 在MS Windows平台下,本组件以COM接口的DLL格式进行封装,可支持所有支持COM接口调用的编程语言及脚本语言。如:PHP、JSP、ASP、ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、VB.net、Delphi、Java等。 3. 响应速度快 由于本组件采用高效特殊的算法引擎结构,每秒钟拆分可达万字汉语文本,在对搜索关键词进行拆分情况下,其响应时间均在毫秒之内,为搜索提供强劲动力。 4. 词组识别准确率高 采用特殊的词组拆分识别算法,可有效消除汉语词组汉语歧义,并可识别各个行业内的特殊用语、专用词汇、公司名、地名等,并具有汉语成语、汉语短语识别功能。如:'醉翁之意不在酒'。经长期使用及大量文本测试其准确率可达到92%以上。 5. 拆分覆盖面广 含盖了IT、化工、金融、贸易、纺织、电子、制造、冶金等各行各业以及日常生活用语的汉语词组。 6. 提供词组自定义功能 可根据用户需要自行添加汉语词组,并提单个汉字添加或从文件批量添加功能。 7.特殊字符过滤功能 可根据用户需要自行定义影响检索结果的不必要的字符。如:! % *等。 9. 具有英文分词识别功能。 本组件同时具有英文单词的分词识别功能。 10. 词性标注功能。(限企业A版) 词性:即词组在汉语语言所表述的性质。如:计算机 /名词; 国 / 名词,方位词 此功能可对拆分出的汉语词组进行词性标注,辅以开发人员理解分析文本序列所包含的语义或意图。其广泛应用于互联网信息搜索以提高搜索精度、智能聊天机器人理解对方话语的含义等领域。整个分词标注以北京大学词性标注集为标准。(详细可参见词性标注表) 11. 词频标注功能。(限企业B版) 词频:即词组在广域的所有汉语词组出现的相对频率值。 此功能可对拆分出的汉语词组进行词频标识。为开发人员在对搜索关键词的理解分析上提供有效的参考,以提高检索精度。整个词频标识是以各大报刊媒体文章为基础,经过精心的统计分析制作而成,具有相当的参考价值。 三、在线演示/免费下载 在线演示:http://61.129.81.124/csw/csw50.asp 四、各语言调用示例代码 参一:InputString[string类型] 需进行分词的原始文本 参二:OutputType[int整型] 输出类型 (0 标准分词输出, 1 附带词性输出, 2 附带词频输出) 参三:DllPath[string类型] 本组件在系统的完整路径 返回:OutputString[string类型] 输出分词后的文本序列 1. C#调用示例代码 首先运行本组件包的install.bat文件,在系统注册本组件。 然后在开发工具引用CSW.dll组件 //以下为C#控制台应用程序调用本组件示例代码. CSWLib.SplitWordClass csw = new CSWLib.SplitWordClass(); string text = csw.Split('待拆分原始文本',0,@'c:winntsystem'); Console.WriteLine(text); Console.ReadLine(); //暂停,查看输出 访问官方网站获得更多代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值