⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 change.cpp

📁 用马尔科夫链编写的一个程序
💻 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 + -