字符串在相等时比较不相等

Strings comparing unequal when they are equal

本文关键字:比较 不相等 字符串      更新时间:2023-10-16

我正在尝试编写一个程序来对 TSP 进行暴力解决方案,作为其中的一部分,我需要根据目标名称找到图形边缘。 r->destcitytofind->name都是std::strings的,实际上相等的都是使用代码另一部分输入的相同字符串赋值的。 我的代码如下:

Edge findEdge(vector<Vertex>::iterator tofind){
    for (vector<Edge>::iterator r = Edges.begin(); r < Edges.end(); r++){
        cout << r->destcity << " " << tofind->name << " ";//This and the next 
        cout << ((r->destcity == tofind->name)?"True":"False") << endl; //line are for debugging
        if (r->destcity == tofind->name)
            return *r;
}
    cerr << "Didn't find edgen";
exit(200);
}
但是,尽管字符串相等

,但字符串永远不会相等。 作为参考,下面是诊断 cout 输出:

New York New York False <- This should return true
Miami New York False
Seattle New York False

编辑:问题实际上不在于程序的这一部分,其中一个字符串前面是不可打印的字符。 由于这是一个I/O问题,如果我无法弄清楚为什么会发生这种情况,我会问一个单独的问题。

不是 100% 确定这是唯一的问题,但您的迭代循环使用了错误的比较:

for (vector<Edge>::iterator r = Edges.begin(); r < Edges.end(); r++){

这是行不通的,因为迭代器不一定是"按顺序"的,即 Edges.end()不一定比其中的所有其他元素"大"。

这将是正确的循环:

for (vector<Edge>::iterator r = Edges.begin(); r != Edges.end(); r++){

请注意,这是使用运算符!=循环,只要没有到达终点。