关于随机生成句子的程序

cbazyzy 2011-11-14 02:55:11
要求写一个c++程序 可以随机生成句子 应用vector和map
利用读取grammar文件(.g)
这里有个例子
The Poem grammar
{
<start>
The <object> <verb> tonight. ;
}

{
<object>
waves ;
big yellow flowers ;
slugs ;
}
{
<verb>
sigh <adverb> ;
portend like <object>;
die <adverb> ;
}
{
<adverb>
warily ;
grumpily ;
}
通过这个grammar的例子
可以生成像The big yellow flowers sigh warily tonight的句子
求大神帮忙做做 实在想不出怎么做
...全文
946 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Graywolf2008 2011-11-15
  • 打赏
  • 举报
回复
有个东西叫马尔可夫链。
beckhanyan 2011-11-15
  • 打赏
  • 举报
回复
嗯。。生成句子用马尔科夫链啊
pirate1986 2011-11-14
  • 打赏
  • 举报
回复
too abstract to i could't understand it
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
继续求高手帮忙
奋斗小青年 2011-11-14
  • 打赏
  • 举报
回复
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
还有人在可以看到愿意帮忙吗?
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
能不能麻烦高手写下代码?因为自己确实没法理解完成这个作业
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 cbazyzy 的回复:]

因为要求要写一个叫grammar.h的类
这个类里面也需要有3个method
void addProduction( string nonTerm, string rhs )左边是“语法类型名称”(比如:object或者verb)然后右边就是一个,也只有一个加进去的内容 比如(verb里的sigh 或者portend like)

string getRandomRHS( string ……
[/Quote]
但是老师又让我们创建一个grammar.h的类 像前面说的应该怎么搞
感觉这个类里面需要有个map和vector
pengzhixi 2011-11-14
  • 打赏
  • 举报
回复
你读文件,碰到<object> 就将后面的字符串放到vector<string>obj里面,遇到<verb>就将后面的字符串放到vector<string>ver里面。解析完之后,你可以根据名词和动词配对构造一个map,动词和副词配对构造另外一个map。然后就根据随机选择一个object然后根据object对应的动词,动词对应的副词构造一个句子
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
因为要求要写一个叫grammar.h的类
这个类里面也需要有3个method
void addProduction( string nonTerm, string rhs )左边是“语法类型名称”(比如:object或者verb)然后右边就是一个,也只有一个加进去的内容 比如(verb里的sigh 或者portend like)

string getRandomRHS( string nonTerm )就是给一个“语法类型名称”return他里面的内容

cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
求高手达人能写写程序
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
如果需要添加我说的method那么存储到vector和map中的步骤也是再main里面完成的么?
ryfdizuo 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cbazyzy 的回复:]

非常感谢9楼高手
但是要求是不用自己手动去填充数据
而是去读取这个“语法”,也就是去scan那个.g的文件(上面的例子)然后在生成“语法”
这里“语法”就是<主语>包括x,x,x<动词>包括x,x,x,x
然后需要一个method 比如randomSentence()去生成一个随机的句子
[/Quote]
按照那个格式解析.g文件,存储到vector和map中。然后随机生成句子。
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
非常感谢9楼高手
但是要求是不用自己手动去填充数据
而是去读取这个“语法”,也就是去scan那个.g的文件(上面的例子)然后在生成“语法”
这里“语法”就是<主语>包括x,x,x<动词>包括x,x,x,x
然后需要一个method 比如randomSentence()去生成一个随机的句子
pengzhixi 2011-11-14
  • 打赏
  • 举报
回复
那无非就是多了个读文件以及解析的过程了。
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
9楼高手pengzhixi可求个q么?
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
我稍微解释一下
那个grammar是一个xxx.g的文件
也就是上面那一片东西 就是要求读取的
比如上面的是poem.g
就看做txt把它给scan了
我想就是你读一个<xxxx>这个东西,然后后面那些就是它的内容,用一个vector去装这些内容,然后放进map里面,<xxx>就是key,vector就是value
pengzhixi 2011-11-14
  • 打赏
  • 举报
回复
#include<iostream>
#include<vector>
#include<map>
using namespace std;



int main()
{
vector<string>vec;
vec.push_back("waves ");
vec.push_back("big yellow flowers ");
vec.push_back("slugs ");
map<string,string>obj_to_ver;
obj_to_ver["waves "]="portend like ";
obj_to_ver["big yellow flowers "]="sigh ";
obj_to_ver["slugs "]="die ";
map<string,string>ver_to_adv;
ver_to_adv["portend like "]="grumpily ";
ver_to_adv["sigh "]="warily ";
ver_to_adv["die "]="quietly ";

int index =rand() % (vec.size());
cout<<"The "<<vec[index]<<obj_to_ver[vec[index]]<<ver_to_adv[obj_to_ver[vec[index]]]<<"tonight"<<endl;

system("pause");
return 0;
}
示范一下吧
ryfdizuo 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cbazyzy 的回复:]

跪求好心高人帮忙 定有重谢
[/Quote]
你先把那段文本的格式 解释一下,懒得去猜啊。。。
cbazyzy 2011-11-14
  • 打赏
  • 举报
回复
还有好心的高手在么?帮忙解决下问题
加载更多回复(6)

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧