当前位置:  编程技术>综合
本页文章导读:
    ▪c++实现文本中英文单词和汉字字符的统计      源代码下载:http://download.csdn.net/detail/nuptboyzhb/4987141 1.统计文本中汉字的频数,为后续的文本分类做基础。对于汉字的统计,需要判断读取的是否为汉字。源代码如下: [C++ code] /* *@aut.........
    ▪程序员日记(两个与长方体有关的算法)             之前的用2d画个三维图形,我说到过跟长方体有关的两个算法,(一个通过中心坐标长宽高求八个顶点,一个通过八个顶点求十二条边) ,但是那两个算法实在是太丑.........
    ▪php:统计邮件的大小方法       //统计用户收件箱所占空间有多少,先计算每封邮件的大小(标题+内容+附近),后总和; //1、计算附近大小; //2、计算标题和内容大小 //3、总和求出单封邮件大小 eg: <?php .........

[1]c++实现文本中英文单词和汉字字符的统计
    来源: 互联网  发布时间: 2013-11-10

源代码下载:http://download.csdn.net/detail/nuptboyzhb/4987141

1.统计文本中汉字的频数,为后续的文本分类做基础。对于汉字的统计,需要判断读取的是否为汉字。源代码如下:

[C++ code]

/*
 *@author:郑海波 http://blog.csdn.net/NUPTboyZHB
 *参考:实验室小熊
 *注:有删改
 */
#pragma warning(disable:4786)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <map>
#include <queue>
#include <ctime>
using namespace std;
void topK(const int &K)
{
	double t=clock();

	ifstream infile("test.txt");
	if (!infile)
		cout<<"can not open file"<<endl;

	string s="";
	map<string,int>wordcount;
    unsigned char temp[2];
	while(true)//国标2312
	{
		infile>>temp[0];
		if(infile.eof()) break;
		if (temp[0]>=0xB0)//GB2312下的汉字,最小是0XB0
		{
			s+=temp[0];
			infile>>temp[1];
			s+=temp[1];
		}
		else//非汉字字符不统计
		{
			s="";
			continue;
		}
		wordcount[s]++;
		s="";
	}
	cout<<"单词种类:"<<wordcount.size()<<endl;
	//优先队列使用小顶堆,排在前面的数量少,使用">";
	priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;
	for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)
	{
		queueK.push(make_pair(iter->second,iter->first));
		if(queueK.size()>K)
			queueK.pop();
	}
	pair<int,string>tmp;
	//将排在后面的数量少,排在前面的数量多
	priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;
	while (!queueK.empty())
	{
		tmp=queueK.top();
		queueK.pop();
		queueKless.push(tmp);
	}
	while(!queueKless.empty())
	{
		tmp=queueKless.top();
		queueKless.pop();
		cout<<tmp.second<<"\t"<<tmp.first<<endl;
	}
	cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" s>"<<endl;
}

int main()
{
	int k=0;
	cout<<"http://blog.csdn.net/NUPTboyZHB\n";
	while (true)
	{
		cout<<"查看前K个频率最高的汉字,K=";
		cin>>k;
		if(k<=0)break;
		topK(k);
	}
	return 0;
}


[图1]


2.统计英文单词的出现频率。这比统计汉字更加的容易,因为单词和单词之间是用空格分开的,所以,直接将单词保存到string中即可。

[c++ code]

/*
 *@author:郑海波 http://blog.csdn.net/NUPTboyZHB
 *参考:实验室小熊
 *注:有删改
 */
#pragma warning(disable:4786)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <map>
#include <queue>
#include <ctime>
using namespace std;
void topK(const int &K)
{
	double t=clock();

	ifstream infile;
	infile.open("test.txt");
	if (!infile)
		cout<<"can not open file"<<endl;
	string s;
	map<string,int>wordcount;

	while(true)
	{
		infile>>s;
		if(infile.eof()) break;
		wordcount[s]++;
	}
	cout<<"单词种类:"<<wordcount.size()<<endl;
	//优先队列使用小顶堆,排在前面的数量少,使用">";
	priority_queue< pair< int,string >,vector< pair< int,string > >,greater< pair< int,string> > > queueK;
	for (map<string,int>::iterator iter=wordcount.begin(); iter!=wordcount.end(); iter++)
	{
		queueK.push(make_pair(iter->second,iter->first));
		if(queueK.size()>K)
			queueK.pop();
	}
	pair<int,string>tmp;
	priority_queue< pair< int,string >,vector< pair< int,string > >,less< pair< int,string> > > queueKless;
	while (!queueK.empty())
	{
		tmp=queueK.top();
		queueK.pop();
		queueKless.push(tmp);
	}
	while(!queueKless.empty())
	{
		tmp=queueKless.top();
		queueKless.pop();
		cout<<tmp.second<<"\t"<<tmp.first<<endl;
	}
	cout<<"< Elapsed Time: "<<(clock()-t)/CLOCKS_PER_SEC<<" >"<<endl;
}
int main()
{
	int k=0;
	cout<<"http://blog.csdn.net/NUPTboyZHB\n";
	while (true)
	{
		cout<<"PUT IN K: ";
		cin>>k;
		if(k<=0)break;
		topK(k);
	}
	return 0;
}


[图2]


参考:实验室小熊
作者:NUPTboyZHB 发表于2013-1-12 10:05:51 原文链接
阅读:32 评论:0 查看评论

    
[2]程序员日记(两个与长方体有关的算法)
    来源: 互联网  发布时间: 2013-11-10

       之前的用2d画个三维图形,我说到过跟长方体有关的两个算法,(一个通过中心坐标长宽高求八个顶点,一个通过八个顶点求十二条边) ,但是那两个算法实在是太丑陋了,对于向我这种有强迫症的人简直不能忍受,所以我现在先把它们的算法用python描述出来,接着试着把它们变得更精巧,俗话说,代码就像女生的超短裙,越短越好...(虽然不知道是谁说的,但肯定是个男人)


算法1.通过一个中心坐标cen,和长方体的长宽高lwh,求出长房体的八个顶点 其实如果(x,y,z) = cen, (l,w,h) = lwh 我们的算法就是要求出x加减l,y加减w,z加减h然后在做一个组合,不过要注意位置不能变,所以一共有八个结果,这就是我们要求的八个顶点, 我的算法就是模仿八皇后,不过不需要回溯,递归到合适的值,把值保存起来,


def cubovers(cen,lwh):
    vertex = [None]*3
    res = []
    def ver(i):
	if i == 3: 
	    res.append(vertex[:])
	else:
	    for x in [-1, 1]:
	 	vertex[i] = cen[i] + x*lwh[i]/2.0
		ver(i+1)
		
    ver(0)
    return res


其中for x in [-1, 1]: 就是分别求出了加和减,(做个乘法就行了)

算法2.第二个算法根据前面求出的顶点,计算出应该有的十二条边,这个算法说起来很简单,找出顶点集合中三个坐标中有两个相等的,那么它们之间就有一条连线。
所以我们先要写一个函数来判断两个点是否是共线(在长方体)

def same2(ver1, ver2):
    for i in range(3):
	for j in range(3):
	    if i == j:
		continue
	    if ver1[i] == ver2[i] and ver1[j] == ver2[j]:
		return True
    return False

我们要小心三个都相等,那就成同一个点了。
之后,求线算法就调用此函数来判断是否符合并把它们保存起来.


def cubolines(vers):
    res = []
    for i in vers:
	for j in vers:
	    if i == j:
		continue
	    if same2(i, j):
		res.append([i,j])
    return res


再短一点,再细一点---------孙悟空
我们的代码之所以看上去那么长,是因为没有很好的处理遍历集合,如果你能很好的写出你想要的遍历方式,那么你的代码会变得非常漂亮,而且有的时候,你以为自己写的代码已经很漂亮了,但是很可能另一个人的代码就会让你自叹不如,python就是这样,如果你只是把这些可跌代对象当c语言中的数组使,肯定会让代码变得跟c语言一样长,下面我用yield,闭包,和新的遍历方式重写这两个算法,使它们更短,如果哪位大神能写出更短的比如用什么itertools,求指点呀!
1,求顶点的算法:

def cubovers(cen, lwh):
    def vers(i):
	for x in [-1, 1]:
	    p = cen[i] + x*lwh[i]/2.0
	    if i == 2:
		yield (p,)
	    else :
		for rs in vers(i+1):
		    yield (p,)+rs

    return list(vers(0))
说明,因为使用了yield所以不需要一个列表保存结果了,中间变量也不需要用参数传递,而且我还是用了闭包,因为cen和lwh我并不想在参数中传递,这样看上去会很舒服。返回的时候返回list(vers(0)),因为yield返回的算是一种佚代器
2.求边线的算法

def same2(ver1,ver2):
    for i in range(3):
	if ver1[:i]+ver1[i+1:] == ver2[:i] + ver2[i+1:]:
	    return True
    return False 

same2看上去比以前短了,因为新的方式佚代出我想要的元素,比如用了切片

def cubolines(vers):
    return [[vers[i],t] for i in range(len(vers)) for t in vers[i+1:] if same2(vers[i],t)]


cubolines只用了一行,看上去会有点难,我返回了一个列表推导式,其实内部就是对一个列表中的元素作了个组合运算,
作者: aiqier
CSDN博客: http://blog.csdn.net/aiqier627


作者:aiqier627 发表于2013-1-12 9:59:20 原文链接
阅读:42 评论:0 查看评论

    
[3]php:统计邮件的大小方法
    来源: 互联网  发布时间: 2013-11-10

//统计用户收件箱所占空间有多少,先计算每封邮件的大小(标题+内容+附近),后总和;

//1、计算附近大小;

//2、计算标题和内容大小

//3、总和求出单封邮件大小

eg:

<?php    
    $attach_size= 0;    
    if($attachmentid){  //获取附近的大小    
        $attach_data= attachdata($attachmentid);    
        if($attach_data){    
            foreach($attach_dataas$value) {    
                $attach_size+= $value['filesize'];    
            }    
        }    
    }    
    //获取标题和邮件内容的大小    
    $email_content_size= 0;    
    $_filename= "attachment/emailsizecalculate.tmp";    
    $_file= fopen($_filename, "wb");    
    fwrite($_file, $subject.$content);    
    fclose($_file);    
    if($_temp= filesize($_filename)){    
        $email_content_size= $_temp;    
    }    
    $del_ret= @unlink($_filename);    
    $sum_size= $attach_size*1024 + $email_content_size;  //邮件总大小           
?>


作者:zyb_icanplay7 发表于2013-1-12 9:53:11 原文链接
阅读:41 评论:0 查看评论

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3