关于制作可执行程序的新手问题

时间:2010-08-02 10:50:28

标签: c

我是其他学科的学生。我想自己制作一个可执行程序。假设我想制作的程序是一个包含几千个单词的小字典。为了在我的Windows XP中创建这样的程序,我收集了一个名为 Borland C ++ V.5.02 的编译器。我下载了一些关于C语言的书籍,如Brian W. Kernighan,Dennis M. Ritchie撰写的 Programming Language (第2版); Sams 24小时内自学C ,以及Byron S. Gottfried的使用C 编程(第2版)。我开始阅读这些书籍,但很快我就发现没有指导如何制作这样的程序,或者我无法理解那些巨大的内容。我期待你的一些指示告诉我应该怎么做。请留下一些评论来帮助我创建这种类型的程序。

4 个答案:

答案 0 :(得分:2)

如果你没有计算机体系结构的概念,那么C就不是你自己学习的最友好的语言。

Python这样的东西更合适吗?

我确信你可以下载许多Python书籍: - )

答案 1 :(得分:1)

欢迎编程。 :)

可能更容易将小问题视为问题:

  • 你将如何存储你的字典?
    • 纯文本,任何订单 - 易于使用,速度较慢
    • 纯文本,已排序 - 需要对单词列表进行排序(使用sort实用程序很容易,但您或您的用户必须记住对列表进行排序);更快
    • 二进制版本(例如,单词的32字节'记录'):更难编辑,但快速查找
    • 树结构的二进制编码,子节点允许字符转换:需要工具来创建,非常快速的查找
    • 聪明的哈希http://en.wikipedia.org/wiki/Bloom_filters可以非常快速地进行。

一旦你选择了存储空间(我建议使用纯文本,任何顺序,作为一个很好的起点),你需要找出算法:

  • 对于给定的单词,将其与文件中的每个单词进行比较
  • 所以你需要一次一个地读取文件中的一行(循环中fgets
  • 将该字与行(strcmp
  • 进行比较
  • 如果找到则返回1
  • 如果到达文件末尾,则返回0

现在,对输入中的每个单词进行一次迭代:

  • 读一行(fgets
  • 将字符串标记为单词(strtok
  • 剥去标点符号(或忽略?或......)
  • 将这个词传递给你之前写的例程

这是一个糟糕的字典程序:对于一个100,000字的字典(我/ usr / share / dict / words是98,000,我认为OpenBSD系统上的字列表在150,000范围内)和一个5,000字的文档,你将运行你的内循环大约250,000,000次。即使是快速的机器,这也会很慢。这就是为什么我之前提到了所有那些更复杂的数据结构 - 如果你想要它快,你就不能天真。

如果你对单词列表进行排序,那么你的内循环中将会有大约83,000个比较。

(现在是一个很小的转移:look程序支持-b选项要求二进制搜索;没有-b,它会运行线性搜索:

         'help'  'universe' 'apple'
linear    .040s    .054s     .058s
binary    .001s    .001s     .001s

换句话说,如果您要完成5,000个这样的操作,排序单词列表将为您提供更快的运行时间。)

如果你构建一个有限状态机(树形结构),它将与你输入的单词中的字符数相同,即5000次。这将是一个巨大的节省。

如果你构建布隆过滤器,它将计算一个或两个哈希值(这是对你的角色的一些简单算术,非常快)然后一两次查找。很快。

我希望这是有帮助的,至少更简单的版本不应该难以实现。

答案 2 :(得分:0)

尽管有些人这么认为,编程并不是最简单的事情。学习和掌握需要花费大量的时间,所以如果你真的考虑创建自己的应用程序需要很多耐心和时间。 如果你想使用你的这个应用程序来学习编程,那么我建议找一些特定语言的教程和挖掘。 如果你的主要学科需要它,也许你可以聘请某人为你创建这样的应用程序,或者浏览sourceforge.net以获得类似的解决方案,或找到商业替代品。

是的,一开始很难:)

答案 3 :(得分:0)

如果您想学习C ++,那么您可以使用免费的Microsoft Visual C ++ Express。创建可执行程序是非常简单的任务。看Visual C++ Guided Tour