2013-03-08 3 views
2

По какой-то причине я не могу правильно присвоить имена. Может ли кто-нибудь сказать мне, что с ним не так? Насколько я могу судить, проблема в том, что строки не сравниваются правильно. Я уже пробовал сопоставления строк, и я знаю, что этот код должен работать. Это действительно меня озадачило.C++ сортировка векторных строк не работает

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

using namespace std; 

void sortNames(vector<string> &); 

void main() 
{ 
    vector<string> namesList; 
    ifstream namesFile; 
    namesFile.open("Names.txt"); 

    // Make sure the file exists. 
    if (namesFile) 
    { 
     // Get the names from the file. 
     string name; 
     while (getline(namesFile, name)) 
      namesList.push_back(name); 

     // Sort the imported names. 
     sortNames(namesList); 

     for (int i = 0; i < namesList.size(); i++) 
      cout << namesList[i] << endl; 
    } 
    else 
    { 
     cout << "Data files are missing"; 
    } 

    namesFile.close(); 
} 

void sortNames(vector<string> &list) 
{ 
    for (int i = 0; i < list.size(); i++) 
    { 
     // Find the lowest value after i. 
     int lowIndex = i; 
     for (int j = i + 1; j < list.size(); j++) 
     { 
      string name = list[i]; 
      string name2 = list[j]; 

      if (name > name2) 
       lowIndex = j; 
     } 

     // Flip the elements if there was a value lower than i. 
     if (i != lowIndex) 
     { 
      string temp = list[i]; 
      list[i] = list[lowIndex]; 
      list[lowIndex] = temp; 
     } 
    } 
} 
+7

Вы знаете, что вы можете сортировать вектор с помощью 'зОго :: sort'? –

+2

Это учебное упражнение в учебнике для изучения алгоритмов сортировки и поиска. – Emrys90

ответ

5

Вот проблема: эта линия

string name = list[i]; 

должен быть

string name = list[lowIndex]; 

Ваше текущее выполнение сравнивает элемент в j не наименьшему строки, которые вы нашли до сих пор, но к строке с индексом i. Это неверно, потому что он не находит наименьшую оставшуюся строку: вместо этого он находит последнюю строку в vector, которая меньше текущего элемента по индексу i, что не то, что вы хотите.

+0

Ничего себе спасибо. Не могу поверить, что я пропустил это. – Emrys90

0

, а не string name = list[i];, вы хотите string name = list[lowIndex];

Смежные вопросы