Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果数组中的元素在循环中运行时已经递增,我怎么能不允许它不递增呢?_C++ - Fatal编程技术网

C++ 如果数组中的元素在循环中运行时已经递增,我怎么能不允许它不递增呢?

C++ 如果数组中的元素在循环中运行时已经递增,我怎么能不允许它不递增呢?,c++,C++,我正试图用给定的输入获取CFG的摘要。我必须列出终端以及它在规则中出现的次数。然而,我在计算同一规则上的多个终端时遇到了麻烦 for (int i = 0; i < cfg.size(); i++) { for (int j = 0; j < cfg[i].size(); j++) { for (int k = 0; k < terminal.size(); k++) { if (strcmp(cfg[i]

我正试图用给定的输入获取CFG的摘要。我必须列出终端以及它在规则中出现的次数。然而,我在计算同一规则上的多个终端时遇到了麻烦

for (int i = 0; i < cfg.size(); i++)
{
    for (int j = 0; j < cfg[i].size(); j++)
    {
        for (int k = 0; k < terminal.size(); k++)
        {
            if (strcmp(cfg[i][j].c_str(), terminal[k].c_str()) == 0)
            {
                //TO-DO if counter[k] already incremented do not increment counter[k] again
                counter[k]++;
                break;
            }
        }
    }
}
当正确答案为1时,它将为b返回3


如果我能在计算完规则后再离开它,那就太好了。谢谢你

我不确定我是否理解你的意思,但也许改变循环顺序会有所帮助

for (int i = 0; i < cfg.size(); ++i)
{
    for (int k = 0; k < terminal.size(); ++k)
    {
        for (int j = 0; j < cfg[i].size(); ++j)
        {
            if (strcmp(cfg[i][j].c_str(), terminal[k].c_str()) == 0)
            {
                ++counter[k];
                break;
            }
        }
    }
}
for(int i=0;i
为什么
strcmp
如果您可以访问
std::string
?如果目标是不递增,为什么递增?只需将计数器[k]设置为1。或者我遗漏了什么?目标是每次终端在规则的右侧结束时递增。如果终端出现多次,如果我已经计算了第一次,我就不应该增加。@muchtolearn那么为什么仅仅将
计数器[k]
设置为1不能实现这个目标呢?你可以看到这个符号一千次,值仍然是1。@PaulMcKenzie可能还有另一个规则有b,我必须将它增加到2。例如,Z->AB,X->BC将返回2,因为bI错误地处理了整个问题。我所要做的就是确保我添加到cfg的向量没有重复项,以避免这个问题。谢谢你@如果你不想复制,那么你使用了错误的STL容器。您应该使用
std::set
而不是
std::vector
std::set
不存储重复项。
for (int i = 0; i < cfg.size(); ++i)
{
    for (int k = 0; k < terminal.size(); ++k)
    {
        for (int j = 0; j < cfg[i].size(); ++j)
        {
            if (strcmp(cfg[i][j].c_str(), terminal[k].c_str()) == 0)
            {
                ++counter[k];
                break;
            }
        }
    }
}