<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文Flex例子 &#187; C++</title>
	<atom:link href="http://blog.minidx.com/tag/c/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.minidx.com</link>
	<description>中文Adobe Flex例子,Flex实例教程,RIA资源,全文检索技术,算法和数据结构</description>
	<lastBuildDate>Thu, 31 Mar 2011 03:22:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Stein算法的简单描述以及C++/Java的三种实现源代码</title>
		<link>http://blog.minidx.com/2008/01/29/452.html</link>
		<comments>http://blog.minidx.com/2008/01/29/452.html#comments</comments>
		<pubDate>Tue, 29 Jan 2008 13:17:54 +0000</pubDate>
		<dc:creator>Minidxer</dc:creator>
				<category><![CDATA[数据结构和算法]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Stein]]></category>
		<category><![CDATA[最大公约数]]></category>
		<category><![CDATA[欧几里德]]></category>
		<category><![CDATA[算法]]></category>
		<category><![CDATA[试商法]]></category>

		<guid isPermaLink="false">http://blog.minidx.com/2008/01/29/452.html</guid>
		<description><![CDATA[ 在欧几里德算法的简单描述以及C++与Java的各自实现代码中介绍的欧几里德算法是计算两个数最大公约数的传统算法，无论从理论还是从实际效率上都是很好的。但是却有一个致命的缺陷，这个缺陷在素数比较小的时候一般是感觉不到的，只有在大素数时才会显现出来。 一般实际应用中的整数很少会超过64位（当然现在已经允许128位了），对于这样的整数，计算两个数之间的模是很简单的。对于字长为32位的平台，计算两个不超过32位的整数的模，只需要一个指令周期，而计算64位以下的整数模，也不过几个周期而已。但是对于更大的素数，这样的计算过程就不得不由用户来设计，为了计算两个超过 64位的整数的模，用户也许不得不采用类似于多位数除法手算过程中的试商法，这个过程不但复杂，而且消耗了很多CPU时间。对于现代密码算法，要求计算 128位以上的素数的情况比比皆是，设计这样的程序迫切希望能够抛弃除法和取模。








由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷，Stein算法只有整数的移位和加减法，为了说明Stein算法的正确性，首先必须注意到以下结论： gcd(a,a) = a，也就是一个数和他自身的公约数是其自身 gcd(ka,kb) = k gcd(a,b)，也就是最大公约数运算和倍乘运算可以交换，特殊的，当k=2时，说明两个偶数的最大公约数必然能被2整除。 
根据上面的规律，Stein算法如下： 如果A=0，B是最大公约数，算法结束 如果B=0，A是最大公约数，算法结束 设置A1 = A、B1=B和C1 = 1 如果An和Bn都是偶数，则An+1 =An /2，Bn+1 =Bn /2，Cn+1 =Cn *2(注意，乘2只要把整数左移一位即可，除2只要把整数右移一位即可) 如果An是偶数，Bn不是偶数，则An+1 =An /2，Bn+1 =Bn ，Cn+1 =Cn (很显然啦，2不是奇数的约数) 如果Bn是偶数，An不是偶数，则Bn+1 =Bn /2，An+1 =An ，Cn+1 =Cn (很显然啦，2不是奇数的约数) 如果An和Bn都不是偶数，则An+1 =&#124;An -Bn&#124;，Bn+1 =min(An,Bn)，Cn+1 =Cn ，n++，转4 
看到这里，我们已经可以给出Stein算法和欧几里德方法效率上的差别了： 在欧几里德算法的简单描述以及C++与Java的各自实现代码中可以知道，欧几里德算法最恶劣的情况是，每次迭代a = 2b -1,这样，迭代后，r= b-1。如果a小于2N，这样大约需要 [...]]]></description>
		<wfw:commentRss>http://blog.minidx.com/2008/01/29/452.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>欧几里德算法的简单描述以及C++与Java的各自实现(源代码)</title>
		<link>http://blog.minidx.com/2008/01/29/450.html</link>
		<comments>http://blog.minidx.com/2008/01/29/450.html#comments</comments>
		<pubDate>Mon, 28 Jan 2008 16:30:23 +0000</pubDate>
		<dc:creator>Minidxer</dc:creator>
				<category><![CDATA[数据结构和算法]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[最大公约数]]></category>
		<category><![CDATA[欧几里德]]></category>
		<category><![CDATA[算法]]></category>
		<category><![CDATA[辗转相除法]]></category>

		<guid isPermaLink="false">http://blog.minidx.com/2008/01/29/450.html</guid>
		<description><![CDATA[ 欧几里德算法描述：
欧几里德算法又称辗转相除法，用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理：
定理：gcd(a,b) = gcd(b,a mod b)
证明：a可以表示成a = kb + r，则r = a mod b
假设d是a,b的一个公约数，则有d&#124;a, d&#124;b，而r = a &#8211; kb，因此d&#124;r ,因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数，则d &#124; b , d &#124;r ，但是a = kb +r ,因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的，其最大公约数也必然相等，得证








下面是该算法的C++实现：
void swap(int &#38; a, int &#38; b){
    int c = a;
    a = [...]]]></description>
		<wfw:commentRss>http://blog.minidx.com/2008/01/29/450.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>利用Minidx Extract-Text Com组件从doc,Xls,Pdf&#8230;&#8230;等读取文本内容VC Demo</title>
		<link>http://blog.minidx.com/2008/01/10/373.html</link>
		<comments>http://blog.minidx.com/2008/01/10/373.html#comments</comments>
		<pubDate>Wed, 09 Jan 2008 16:47:46 +0000</pubDate>
		<dc:creator>Minidxer</dc:creator>
				<category><![CDATA[Minidx相关]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Com组件]]></category>
		<category><![CDATA[doc]]></category>
		<category><![CDATA[Extract Text]]></category>
		<category><![CDATA[IFilter]]></category>
		<category><![CDATA[indexing service]]></category>
		<category><![CDATA[Minidx]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[VC.net]]></category>
		<category><![CDATA[xls]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://blog.minidx.com/2008/01/10/373.html</guid>
		<description><![CDATA[ 《利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容》中具体的说明了Vb.Net中调用Minidx Extract-Text Com组件对Word,Excel,Pdf等各种文件进行文本抽取的用法。结果很多人都发邮件过来询问C++中如何调用（一些邮件会被Gmail判断为垃圾邮件……强烈建议有问题直接在本文后面留言或在这里提问，这样也可以减轻一点我的工作量，不必挨个回复）。抽空作了一个VC的Demo，工程用VS2005创建的，Unicode版本。下面对Demo稍微做一些说明，一些基本原理直接参照《利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容》就可以了，这里不再重复。








●Demo(VC++)源代码从这里下载(相关文档资料分类中的“Doc,Xls,Pdf等文件中抽取文本的Com组件及Demo(VC++)源代码”)
●执行Demo
①、双击run.bat执行，注册Com组件
 
②、双击demo_vc\release或者demo_vc\debug目录下的demo_vc.exe
 
③、点“File”，选择对象文件（ex: 从demo_vc\test-data中选择）
 
④、选中文件，查看抽取文本结果。（下面分别是中日英Word的抽取结果）
  
 
注意:抽取文本对象文件需要有读写权限，正在编辑中的文件抽取文本时可能会出错。
●实际调用方法：
①、复制下面三个文件到自己工程的相应目录下
・ExtractText.dll・ExtractText.h・ExtractText_i.c
②、在需要的文件中用下面的代码引入
#include &#8220;ExtractText.h&#8221;#include &#8220;ExtractText_i.c&#8221;
③、抽取文本部分代码：

   1:  ITextExtractor *te = NULL;
   2:  // Declare and HRESULT and a pointer to the Simple_ATL interface
   3:  HRESULT           [...]]]></description>
		<wfw:commentRss>http://blog.minidx.com/2008/01/10/373.html/feed</wfw:commentRss>
		<slash:comments>80</slash:comments>
		</item>
		<item>
		<title>利用Minidx Extract-Text Com组件从Word,Xls,Pdf&#8230;&#8230;等文件中读取文本内容</title>
		<link>http://blog.minidx.com/2007/12/31/334.html</link>
		<comments>http://blog.minidx.com/2007/12/31/334.html#comments</comments>
		<pubDate>Mon, 31 Dec 2007 13:26:16 +0000</pubDate>
		<dc:creator>Minidxer</dc:creator>
				<category><![CDATA[Minidx相关]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Com组件]]></category>
		<category><![CDATA[doc]]></category>
		<category><![CDATA[Extract Text]]></category>
		<category><![CDATA[IFilter]]></category>
		<category><![CDATA[indexing service]]></category>
		<category><![CDATA[Minidx]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[VB.net]]></category>
		<category><![CDATA[xls]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://blog.minidx.com/2007/12/31/334.html</guid>
		<description><![CDATA[不少人对Google，Baidu等搜索引擎可以“找到”你放在服务器上的Word的Doc,Excel的xls以及Pdf等各种文件而感到惊叹不已，也有不少人发来邮件询问我Minidx文件管理器中从各种格式的文件中读取文本内容是如何实现的。Linux平台实现起来比较复杂一些，不过对于Windows用户来说，其实利用微软Ifilter的Indexing service接口，可以比较容易的实现上面的功能。Minidx支持200多种文件格式，其实也是利用了Ifilter的接口。实现的基本原理，就是写一个Com组件，去查找系统中相应文件格式的API接口所在的Dll路径，然后调用抽取文本。








在上面的微软Ifilter中有关于IFilter的基本概念的介绍，这里不再重复，另外在codeproject的Using IFilter in C#中，可以找到C#的实现并且可以下载到源代码。因为性能上的考虑，Minidx文件管理器的这一部分完全利用C++实现，并封装为Com组件，下面主要是对如何通过调用这一Com组件在自己的程序中实现Doc，Xls，Pdf，msg等等文本阅读等功能作一些说明。
●Demo压缩包构造（压缩包可以从这里下载）
demo_vb.zip&#8212;&#8212;&#8212;&#8211;demo_vb.sln&#160;&#160; 整个解决方案（solution）文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;&#8212;&#8212;demo_vb.suo　用户配置文件
　　　　　　　　　 &#124;&#8212;&#8212;&#8212;demo_vb&#8212;-bin&#8212;&#8212;&#8211;Debug&#8212;-demo_vb.exe&#160;&#160; Debug版本目标文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;&#8212;&#8212;Release&#8212;demo_vb.exe&#160; Release版本目标文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;My Project(忽略)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;obj&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 编译生成的临时文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;demo_vb.vbproj&#160;&#160;&#160;&#160;&#160; 工程文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;ExtractText.dll&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 文本抽取Com组件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;Form1.Designer.vb&#160;&#160; Demo的GUI文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;Form1.resx&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 资源文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;Form1.vb&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Demo的源代码文件
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#124;&#8212;run.bat&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Com组件注册命令
●执行Demo
①、双击run.bat执行，注册Com组件
 
②、双击demo_vb\bin\Release或者demo_vb\bin\Debug目录下的demo_vb.exe
 
③、点“File”，选择对象文件
 
④、选中文件，查看抽取文本结果。（下面分别是中日英Word的抽取结果）
   
注意:抽取文本对象文件需要有读写权限，正在编辑中的文件抽取文本时可能会出错。
●Demo代码说明
首先当然需要导入Dll组件，下面的代码很简单，也都有注释，应该不难理解，这里不再累述，有什么不明白或者有什么问题的话，可以提出来一起探讨，：）

   1:  '-----------------------------
   2:  ' desc: Extract text from selected file
   3:  '-----------------------------
  [...]]]></description>
		<wfw:commentRss>http://blog.minidx.com/2007/12/31/334.html/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>关于删除一个指针一文后续引发的思考</title>
		<link>http://blog.minidx.com/2007/11/10/73.html</link>
		<comments>http://blog.minidx.com/2007/11/10/73.html#comments</comments>
		<pubDate>Sat, 10 Nov 2007 15:43:01 +0000</pubDate>
		<dc:creator>Minidxer</dc:creator>
				<category><![CDATA[程序开发相关]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[codefreak]]></category>
		<category><![CDATA[delete p]]></category>
		<category><![CDATA[fr3@K]]></category>
		<category><![CDATA[指针]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://blog.minidx.com/2007/11/10/73.html</guid>
		<description><![CDATA[在cppblog的blog上写过一篇《在删除一个指针delete p之前是否需要检查p是否为NULL?》，结果引发了一些讨论，因为func的评论，有幸让fr3@K也参与了其中.讨论进行的也算比较热烈,对于讨论结果当时也以为找到了最终解.一切问题都已经解决了.再次访问fr3@K的codefreak博客,看了他的关于这一讨论的《重複 delete 指標》一文之后，却让我不由得开始重新思考这个问题，也开始质问自己面对问题时候的思考方式是否正确。








当遇到问题的时候，解决这个问题的思维方式，通常第一反应是：如何回避这个问题！不否认这样的确可以解决我们所遇到的大部分问题，但是所起到的效果，却仅仅是解决了这个问题，仅此而已。想到这里不得不说一下对 fr3@K这个人的感觉，没有实际接触过，但是他的为数不多的发言却让我不得不对他肃然起敬，犹如面对一个强大的存在。
不去考虑问题产生的原因（深层次的原因？），单纯的从解决问题的角度去思考，在这个出发点上，就已经注定结果了。相比于人家对待问题症结的一剑封吼，治标也治本，我们是不是缺少了一些什么？所谓的成熟方案，真的足够成熟吗？还是仅仅是有中国特色的成熟？
你可能还对下列文章感兴趣:C++中删除一个指针delete p的工作原理C++ 程序文档生成器(doxygen)用法介绍C语言中利用strstr函数进行字符串分割Stein算法的简单描述以及C++/Java的三种实现源代码欧几里德算法的简单描述以及C++与Java的各自实现(源代码)]]></description>
		<wfw:commentRss>http://blog.minidx.com/2007/11/10/73.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching using disk
Object Caching 466/878 objects using disk

Served from: blog.minidx.com @ 2012-02-09 13:32:58 -->
