c++ - 字符串相等时比较不相等

标签 c++

我正在尝试编写一个程序来对 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 edge\n";
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++){

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

关于c++ - 字符串相等时比较不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711440/

相关文章:

c++ - 对数组的引用与 C++ 中的数组名称完全相同

c++ - 如何递归使用typedef?

c# - 从视频中提取帧的最快方法

c++ - 使用 VAO 和 VBO 在 3.2 中绘制 OpenGL 直线和正方形

c++ - JUCE - 成员函数不可行 : 'this' Argument Has Type const

c++ - 如何在命名空间中使用 += 函数

C++ Directx鼠标输入在失去焦点后表现得很奇怪

java - 64位windows 7下Java程序与C程序的stdin/stdout通信

c++ - std::malloc 的奇怪段错误

c++ - 无法在 Cocos2d-x 3.0 alpha 2 中使用效果