📄 change.cpp
字号:
#include<iostream>
#include<vector>
#include<deque>
#include<map>
#include<string>
#include<fstream>
using namespace std;
//////////////////////////////////////////////////////
char NONWORD[]="\n";
enum{
NPREF=2,/*前缀中词的格数*/
MAXGEN=100000/*生成次数的上界*/
};
//////////////////////////////////////////////////////
typedef deque<string> Prefix;
map<Prefix,vector<string> > statetab;
///////////////////////////////////////////////////////
void build(Prefix& prefix,ifstream& in);
void add(Prefix& prefix,const string& s);
void generate(int nwords);
//////////////////////////////////////////////////////
int main(void)
{
ifstream in("GetWords.txt"); //读文件
int nwords=MAXGEN;
Prefix prefix; //输入前缀
for(int i=0;i<NPREF;i++) //建立最初的前缀
add(prefix,NONWORD);
build(prefix,in);
add(prefix,NONWORD);
generate(nwords);
return 0;
}
//////////////////////////////////////////////////////////
//build:读文件读输入的词
void build(Prefix& prefix,ifstream& in)
{
string buf;
while(in>>buf)
add(prefix,buf);
}
//////////////////////////////////////////////////////////
//add:把词加入后缀菜单
void add(Prefix& prefix,const string& s)
{
if(prefix.size()==NPREF){
statetab[prefix].push_back(s);
prefix.pop_front();
}
prefix.push_back(s);
}
/////////////////////////////////////////////////////////
//generate:产生输出词
void generate(int nwords)
{
Prefix prefix;
int i;
for(i=0;i<NPREF;i++)
add(prefix,NONWORD);
for(i=0;i<nwords;i++){
vector<string>& suf=statetab[prefix];
const string& w=suf[rand() % suf.size()];
if(w==NONWORD)
break;
cout<<w<<" ";
prefix.pop_front();
prefix.push_back(w);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -