Я пишу программу 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, если это необходимо.
Что происходит со всеми этими 'std :: string (...)' temporaries? –
Посмотрите на 'std :: map'. Или 'std :: unordered_map'. Или, по крайней мере, 'std :: pair'. – rici