【发布时间】:2018-07-01 09:08:29
【问题描述】:
我正在构建一个系统,它应该在一个对列表中,两个字符串,并将它们排序为正确的顺序。它们出现在列表中:
E,F
C,D
B,C
A,B
D,E
输出应该是 A,B,C,D,E,F
给系统一个随机字母开头,然后遍历列表并使用该字母获取正确的下一个字母。因此,如果给定 C,它指向 D,而 D 指向 E。然后它返回 C 并使用它来查找之前的字母。然后我将它添加到一个双端队列。我怀疑在第二个循环中的某个地方出了点问题,这意味着我只得到了字母之后而不是之前的内容。但是,如果我给它 E 从它开始,它会很好,并且在之前和之后得到所有东西。
void mm::sort(std::string startName)
{
std::list<std::pair<std::string, std::string>>::const_iterator iterator;
std::string base = startName;
int i = 0;
for (iterator = men.begin(); iterator != men.end(); iterator++)
{
if ((*iterator).first == base)
{
output.push_back(base);
base = (*iterator).second;
iterator = men.begin();
i++;
}
}
base = output[0];
for (iterator = men.begin(); iterator != men.end(); iterator++)
{
if ((*iterator).second == base)
{
output.push_front(base);
base = (*iterator).first;
iterator = men.begin();
i++;
}
}
}
【问题讨论】:
-
so if given C, it points to E真的吗?不是 D? -
如果输出完全不依赖于配对结构,并且忽略重复,为什么不将每个字符串插入一个集合?它已经完成了您想要的两件事(排序和消除重复项)。
-
在第一个循环的
if语句中,您有:iterator = men.begin();。现在盯着你的for循环,特别是for循环是如何迭代的,并继续盯着它,直到你找出你的错误。记住计算机编程的黄金法则:计算机总是完全按照你告诉它去做的事情去做,而不是你想让它做的事情。一直盯着for循环,直到你弄清楚你到底告诉计算机做什么为止。 -
@TRV 如果你能创建 MCVE 将会非常有帮助:*.com/help/mcve