2016-01-12 3 views
1

Я сделал функцию для своей программы, которая читает из текстового файла, добавляет контент в вектор и затем выполняет поиск в этом векторе. Проблема в том, что даже если файл пуст, он показывает, что он что-то нашел, с другой стороны, если я изменяю возвращаемое значение на 0, он не дает результатов вообще!Функция поиска возвращает неправильные результаты

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

using namespace std; 

vector<string> contacts; 


//This function returns at what index the name is found 
    int searchContact(string contactToSearch) 
    { 


    string entry; 
    ifstream input; 
    input.open("contacts.txt"); 

    while (input.good()) 
     { 
      while (getline(input, entry)) 
       { 
        contacts.push_back(entry); 

       } 
      input.close(); 
     } 

    for(int i = 0; i < contacts.size(); i++) 
    { 

     if(contactToSearch == contacts[i]) 
      { 
     //Found => Returning index rest of program can see index 
     return i; 
      } 
     } 

     return 1; 
    } 
+1

В цикле, где вы читаете содержимое файла, внешний цикл не требуется. –

+0

Кстати, как вы отличаетесь от предмета, который ищете, не находящегося (когда вы возвращаете '1' после цикла), и когда элемент, который вы искали, был найден в индексе' 1'? Вероятно, вы должны вернуть что-то вроде '-1', если элемент не найден. –

+1

Также обратите внимание, что при сравнении строк с использованием '==' это сравнение * точное * и чувствительно к регистру. –

ответ

0

Я только что немного обработал ваш код. Дальнейшие усовершенствования возможны, но начинать с

1) Вам не нужно некоторое время для input.good()

2) Вы пытались вернуть 0 и 1, которые действительно являются действительными позиции, где строка может иметь присутствуют в векторе

Всего это в стороне, я до сих пор думаю, что ваш код не может должным образом заполняется массиву со Причиной для этого, может быть: - чувствительно к регистру сравнения, чтения неправильного файла, двоичный файл .. и т.ду ..

Вот отредактированный код, который вы можете использовать

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

using namespace std; 

void readContacts(const string &fileName inputFileName, vector<string> &contacts){ 
    string entry; 
    ifstream input; 
    input.open(inputFileName); 
    if (input.good()) 
    { 
     while (getline(input, entry)) 
      contacts.push_back(entry); 
     input.close(); 
    } 
} 

int searchContact(const string &contactToSearch, vector<string> &contacts) 
{ 
    for (int i = 0; i < contacts.size(); i++) 
    { 
     if (contactToSearch == contacts[i]) 
      return i;  
    } 
    return -1; 
} 

int main(){ 
    vector<string> contacts; 
    // This needs to be filled in with the contact name u want to search 
    string contactToSearch; 
    readContacts("contacts.txt", contacts); 
    int index = searchContact(contactToSearch, contacts) 
     if (index != -1) 
      cout << "Found Contact " << contactToSearch" at location " << index << endl; 
     else 
      cout << "Could Not find contact " << contactToSearch << endl; 
} 
Смежные вопросы