句子: 名词 动词
冠词 句子
句子 连词 句子
连词: “和” “或” “但是”
名词: “鸟” “鱼” “C ++”
动词: “规则” “飞行” “游泳”
冠词: “the”
编写语法很简单。实现代码却给了我一些麻烦。我的伪代码如下:
main()
get user input (string words;)
while loop (cin >> words)
call sentence()
end main()
sentence()
call noun()
if noun() call verb() (if verb is true return "OK" ???)(else "not ok"???)
else if not noun() call article()
if article() call sentence() (if sentence is true "OK"???)(else "not"?)
else if not noun() call conjunction()
if sentence() conjunction() sentence() - no idea how to implement
return "OK"
else "not ok"
这是我的极其粗糙的伪代码。我有几个关于实现它的问题。
对于单词功能(名词、动词等),我该如何检查它们是否为真?(即检查用户输入是否包含birds、fish、fly、swim等)
我应该如何处理连词调用和输出?
我应该从主函数还是调用函数处理输出?
如果我的伪代码完全错误,则上述所有问题都不重要。基础知识是否有问题?
另外,我正在完成《使用C++编程实践与原理》第6章练习,因此希望使用已经学过的语言语法,所以任何属于高级编程范畴的内容可能并不会很有帮助。(练习明确指出不要使用令牌,因此请将其排除在外。)
提前感谢您的帮助!
最后编辑:在书籍的公开群组中,我问了同样的问题,Bjarne Stroustrup回复说他将练习解决方案放在网上。他基本上将输入读入sentence函数,并使用if语句返回true或false。但是,他没有使用冠词,所以我的代码更加复杂。我想,如果从这个练习中学到了什么,那就是当处理大量用户输入时,分词是关键(根据我目前所知)。以下是我的代码。我可能以后会回来修改它,因为它仍然非常有错误,并且基本上只返回句子是否正确,并且无法处理例如(名词、连接词、句子)这样的内容,但是现在我要继续。
#include "std_lib_facilities.h"
bool article(string words)
{
if (words == "the")
return true;
else return false;
}
bool verb(string words)
{
if (words == "rules" || words == "fly" || words == "swim")
return true;
else return false;
}
bool noun(string words)
{
if (words == "birds" || words == "fish" || words == "c++")
return true;
else return false;
}
bool conjunction(string words)
{
if (words == "and" || words == "but" || words == "or")
return true;
else return false;
}
bool sentence()
{
string w1;
string w2;
string w3;
string w4;
cin >> w1;
if (!noun(w1) && !article(w1)) return false; // grammar of IFS!
cin >> w2;
if (noun(w1) && !verb(w2)) return false;
if (article(w1) && !noun(w2)) return false;
cin >> w3;
if (noun(w1) && verb(w2) && (w3 == ".")) return true;
if (verb(w2) && !conjunction(w3)) return false;
if (noun(w2) && !verb(w3)) return false;
if (conjunction(w3)) return sentence();
cin >> w4;
if (article(w1) && noun(w2) && verb(w3) && (w4 == ".")) return true;
if (!conjunction(w4)) return false;
if (conjunction(w4)) return sentence();
}
int main()
{
cout << "Enter sentence. Use space then period to end.\n";
bool test = sentence();
if (test)
cout << "OK\n";
else
cout << "not OK\n";
保持窗口打开();