在堆栈自动机中查找单词的递归函数 我必须在C++中实现StutoCutoCAD,而且我发现在一个单词中使用自动机是有问题的。这是我的想法,但是它离它应该是什么远。 我的增量存储在地图中,字符串>-(S,a)->S我所有的规则都是这种类型的。 例如 findWord("bac")

在堆栈自动机中查找单词的递归函数 我必须在C++中实现StutoCutoCAD,而且我发现在一个单词中使用自动机是有问题的。这是我的想法,但是它离它应该是什么远。 我的增量存储在地图中,字符串>-(S,a)->S我所有的规则都是这种类型的。 例如 findWord("bac"),c++,recursion,finite-automata,C++,Recursion,Finite Automata,对于具有此增量的堆栈自动机(A,A)=A(A,c)=f(S,A)=A(S,b)=A(S,b)=f(S,c)=S start S应该返回true,但是我的函数不能正常工作 bool StackAutomata::findWord(string& word) { if(this->isEmpty()) return false; stack<T> wordInStack; for(string::reverse_iterator it

对于具有此增量的堆栈自动机(A,A)=A(A,c)=f(S,A)=A(S,b)=A(S,b)=f(S,c)=S start S应该返回true,但是我的函数不能正常工作

bool StackAutomata::findWord(string& word)
{
    if(this->isEmpty())
        return false;
    stack<T> wordInStack;
    for(string::reverse_iterator it = word.rbegin(); it!=word.rend(); it++)
    {
        wordInStack.push(*it);
    }
    string current=this->getStart();
   pair<string&,string&> keypairstart = (current,wordInStack.top());
    findWordRecursion(wordInStack,current);

}
template <typename T>
bool StackAutomata::findWordRecursion(stack<T>& wordInStack,string& current)
{
    if(wordInStack.empty() && current == "f")
        return true;
    pair<string&,string&> keypair = (current,wordInStack.top());
    if(delta.count(keypair)==1)
    {
        list<string> value = delta.find(keypair)->second;
        list<string>::iterator it= value.begin();
        while(it!=value.end() && !false)
        {
            stack<T> CopyStack = wordInStack;
            CopyStack.pop();
            findWordRecursion(CopyStack,*it);
            CopyStack=wordInStack;
        }
    }
    else
    return false
}
boolstackautomata::findWord(字符串和单词)
{
如果(此->isEmpty())
返回false;
stack-wordInStack;
for(string::reverse_iterator it=word.rbegin();it!=word.rend();it++)
{
wordInStack.push(*it);
}
字符串current=this->getStart();
pair keypairstart=(当前,wordInStack.top());
findWordRecursion(wordInStack,当前);
}
模板
boolstackautomata::findWordRecursion(stack和wordInStack、string和current)
{
if(wordInStack.empty()&¤t==“f”)
返回true;
pair keypair=(当前,wordInStack.top());
if(增量计数(密钥对)==1)
{
列表值=delta.find(键对)->秒;
list::iterator it=value.begin();
while(it!=value.end()&&!false)
{
stack CopyStack=wordInStack;
CopyStack.pop();
findWordRecursion(CopyStack,*it);
CopyStack=wordInStack;
}
}
其他的
返回错误
}
请提供一份详细的信息。你的代码应该做什么?您遇到的问题是什么?我们仍然需要,如果您希望我们调试您的代码,我们需要能够运行它
findWordRecursion(wordInStack,current)-可能对该调用的结果执行某些操作,而不是忽略它,并在函数中放置一个无返回代码路径。仔细观察,您将看到该错误两次,任何启用了即使是微不足道的警告的编译器都应该告诉您。