2015-09-11 2 views
-3

Я пишу программу C++, чтобы попытаться подражать пакетным скриптам. В настоящее время я пытаюсь реализовать переменную систему. У меня есть система, настроенная так, что каждый раз, когда пользователь создает новую переменную, она добавляется к вектору как имя переменной, запятой, а затем значение. У меня есть некоторые алгоритмы, настроенные для разбиения строки на разделитель (запятая) и возврат вектора с первой записью, являющейся именем, а вторая - значением. При использовании этих алгоритмов для печати имени имя переменной успешно печатается (в данном случае «тест»). однако, пытаясь использовать эту же переменную в алгоритме линейного поиска, переменная «test, 123» вместо «test». Ниже приведен код, вызывающий эту ошибку.Переменная имеет другое значение в зависимости от функции, вызывающей ее

std::string hugeStr=std::string(strSplitter(std::string(removeChar(std::string(splitCommand[1]), '\%')), ",")[0]); 
std::cout<<hugeStr<<std::endl<<std::endl; 
int result=linearSearch(varVector, varVector.size(), hugeStr); 
std::cout<<result<<std::endl; 

Ниже приведен алгоритм поиска.

int linearSearch(std::vector<std::string> myVec, int size, std::string searchKey) 
{ 
    for(int i=0; i<size; i++) 
    { 
     if(searchKey==std::string(myVec[i])) 
      return i; 
     else{ 
      std::cout<<myVec[i]<<std::endl; 
      return -1; 
     } 
    } 
} 

Когда пользователь инициализирует переменную (в данном случае, с именем «тест», а значение «123»), первый COUT оператор печатает «тест». Однако оператор cout в алгоритме линейного поиска печатает «test, 123» и возвращает -1. Почему переменная имеет другое значение при передаче алгоритму поиска?

Полная копия кода может быть найдена по адресу github repo, если это необходимо.

+2

Что происходит со всеми этими 'std :: string (...)' temporaries? –

+0

Посмотрите на 'std :: map'. Или 'std :: unordered_map'. Или, по крайней мере, 'std :: pair'. – rici

ответ

1

Это не так. Вы выводите значение первого элемента в своем векторе, а не searchKey, который вы передали в него.

Вы понимаете, что этот цикл никогда не достигнет i == 1, правильно? Независимо от того, что он будет возвращать, проверяя myVec [0].

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