c语言大作业-电子诗人
本项目的灵感来自于刘慈欣的电子诗人。原文件采用的是Visual Foxpro,可移植性差。现采用C语言重新编写,还原部分功能。
原版电子诗人的特色不在于能够写出精巧的诗,而在于写出“抽象”的诗。故本项目力图还原这一点,绝不采用AI生成,而是使用随机数生成诗句。
目前本项目可以执行简单的写诗和存储功能。
TODO:
- 加入分段功能
- 加入韵脚功能
- 丰富词库
- 加入用户编辑词库功能
- 优化用户体验
......
该项目目前由主程序、词库两个部分组成。词库部分分为noun(名词)、verb(动词)、adjective(形容词)、sentence(句式)四个词库。词库采用ansi编码。
- 程序在开始运行时会先将四个词库从外存读取到内存当中。具体来说,程序会按行读取位于外存的词库,将每一行的换行符去掉,然后存储进一个链表当中去。
- 之后会提示用户想要生成的诗的行数。如果输入的是非int类型的字符,或输入的数字小于1,将提示非法。
- 程序初始化存储机制。如果初始化失败则提示存储机制不可用。后续流程将不会启用存储机制。
- 开始生成诗词。程序会先随机挑选一个句式,此时开始分为屏幕输出和存储机制两条线。
- 1.程序会读取句式。一个句式的构成有:n(名词符)、v(动词符)、a(形容词符)与连接词。例如:
v!a的n
- 2.程序将逐字符地读取这个句式。如果检测到n,就会触发名词挑选函数,随机挑选一个名词(机制与挑选句式的机制相同),之后将该名词直接打印在屏幕上。然后,程序会把该名词拼接在一个字符串
str
的后面。检测到v、a同理。如果该字符位置不是n、v、a中的任意一个(即该位置是连接词),程序将直接打印该连接词,并把该连接词拼接在str
的后面。 - 3.完成句式的读取后,程序打印换行符,并且将拼接完成的
str
存储进存储链表当中。
- 程序在完成所有行的生成之后,如果存储模块初始化正常,将提示是否存储诗词。
- 如果用户输入“Y”,则启动存储机制,用户先输入给诗词的命名(目前似乎只支持英文命名),之后程序将存储在链表里的诗句逐行写入用户命名的txt文件中。该txt文件存储在collection目录下。
- 如果用户不存储,或者存储完成之后,将触发释放机制,释放存储诗词的内存空间。
- 提示用户是否继续生成。继续则返回第二步,否则程序退出。