gpt4 book ai didi

c++ - 如何仅使用 C++ 标准库构建句子解析器?

转载 作者:行者123 更新时间:2023-11-30 01:00:30 25 4
gpt4 key购买 nike

我正在设计一款类似于 Zork 的基于文本的游戏,我希望它能够解析句子并绘制出 TAKE、DROP 等关键字。问题是,我想通过标准的 c++ 库来完成这一切……我听说过外部库(例如 flex/bison)可以有效地完成此任务;但是我现在还不想弄乱那些。

我正在考虑实现的是一个基于标记的系统,它有一个单词列表,即使它们在诸如“拿剑杀死怪物”之类的句子中,并且根据解析器的语法规则,解析器也可以识别这些单词, TAKE, SWORD, KILL 和 MONSTER 都被识别为标记,并会产生输出“Monster killed”或类似的效果。我听说 c++ 标准库中有一个名为 strtok 的函数可以执行此操作,但我也听说它“不安全”。因此,如果这里有人可以伸出援助之手,我将不胜感激。

最佳答案

strtok函数来自 C 标准库,它有一些问题。例如,它会就地修改字符串,并可能由于缓冲区溢出而导致安全问题。您应该改为考虑使用 IOStream C++ 标准库中的类以及 Standard Template Library (STL)容器和算法。

例子:

#include <algorithm>
#include <cctype>
#include <iostream>
#include <sstream>

using namespace std;

int
main()
{
string line;

// grab a line from standard input
while (getline(cin, line)) {

// break the input in to tokens using a space as the delimeter
istringstream stream(line);
string token;
while (getline(stream, token, ' ')) {

// convert string to all caps
transform(token.begin(), token.end(), token.begin(), (int(*)(int)) toupper);

// print each token on a separate line
cout << token << endl;
}
}
}

关于c++ - 如何仅使用 C++ 标准库构建句子解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2625411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com