2013-12-20 92 views
2

我想寫一個程序來對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問題,我會問一個單獨的問題,如果我無法弄清楚爲什麼會發生這種情況。

+4

您可能需要查看兩個字符串以查看是否其中一個包含不可打印的字符。 –

+1

字符串* std :: string *還是C樣式的char指針? – hyde

+0

@hyde他們在問題中作爲'std :: string'給出,但如果它們不是這樣的話,那將解釋它們。 –

回答

3

不是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++){ 

注意。

+0

感謝您的提示,我認爲這可能是這種情況,但還沒有任何問題。我會繼續在程序中改變它。 – IllusiveBrian

+0

測試時使用'<'可以很好,但稍後可能會中斷。它確實取決於實現運行時條件(如空閒內存地址)。 – Mario

+0

你確定嗎?向量迭代器是隨機訪問迭代器,所以它們應該支持<有意義的。 – templatetypedef