以下是用C++实现的人机成语接龙:
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
vector<string> idioms{"金蝉脱壳", "百里挑一", "金玉满堂", "背水一战", "霸王别姬", "天上人间", "不吐不快", "海阔天空", "情非得已", "滴水不漏"};
bool isLegal(const string& lastWord, const string& newWord) // 判断新成语是否合法
{
if (newWord.empty()) return false;
if (lastWord.empty()) return true;
if (lastWord.back() != newWord.front()) return false;
for (const auto& idiom : idioms)
{
if (idiom == newWord) return false;
}
return true;
}
string generateWord(const string& lastWord) // 生成新成语
{
srand(static_cast<unsigned int>(time(nullptr)));
vector<string> temp;
for (const auto& idiom : idioms)
{
if (lastWord.empty() || lastWord.back() == idiom.front()) temp.push_back(idiom);
}
if (temp.empty()) return "";
return temp[rand() % temp.size()];
}
int main()
{
string lastWord;
while (true)
{
cout << "请输入成语(不要带句号):";
string newWord;
getline(cin, newWord);
if (!isLegal(lastWord, newWord))
{
cout << "你输错了,请重新输入!" << endl;
continue;
}
lastWord = newWord;
cout << "计算机回答:" << generateWord(lastWord) << endl;
}
return 0;
}
此程序使用了vector
存储成语库,通过isLegal
函数判断新成语是否合法,通过generateWord
函数生成新成语。主函数中不断循环读入用户输入的成语,并调用以上两个函数进行判断和生成新成语。