我正在执行一项任务,需要从包含多个char链接列表的链表计算度量(每行是一个链表,如图所示)。所以我需要遍历包含第二行空间的每个节点,以检查其他四个空格(顶部,底部,左侧,右侧)周围有多少个空格。例如,参考下图,第三行中的第二个空格周围有四个空格,因此计数++。 (" H"只是意味着非空间角色,抱歉我没有足够的声誉来发布真实的图片)。
我被允许使用STL列表库。我试图使用三个迭代器同时迭代三行。但是,代码变得非常混乱,甚至无法正常工作,因为每行的长度不同。我一直在考虑解决方案两天,但由于我已经练习C ++只有两个月了,所以我能想到的是相当有限的。所以我想知道是否有人可以给我一个提示或更聪明的解决方案。
提前感谢您的建议。
答案 0 :(得分:1)
如果你可以使用任何标准库容器,那么我建议使用矢量矢量。这样,您可以通过索引循环并在相邻向量上使用该索引。如果你可以在算法之前填充向量,那么你可以制作相同大小的所有向量,并首先用所有非空格(零的?)填充它们,然后用链接列表的内容填充它们。
对于固定大小的向量,它基本上应该是2个嵌套循环(从第二个到最后一个但只有一个条目),只检查空格和相邻空格。
未经测试:
bool isSpace(char c) { return c == ' '; } // std::isspace tests for all whitespaces
int countSurroundedSpaces(const std::vector<std::vector<char> >& vecs)
{
int count = 0;
for (int v = 1; v < vecs.size()-1; ++v)
{
for (int i = 1; i < vecs[v].size()-1; ++i)
{
if (isSpace(vecs[v][i])
&& isSpace(vecs[v-1][i]) && isSpace(vecs[v][i-1])
&& isSpace(vecs[v][i+1]) && isSpace(vecs[v+1][i]))
{
++count;
}
}
}
return count;
}