2015-09-11 145 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(...)'临时进行? –

+0

看看'std :: map'。或'std :: unordered_map'。或者至少是'std :: pair'。 – rici

回答

1

它没有。您正在输出矢量中第一个元素的值,而不是您传入它的searchKey。

你知道这个循环永远不会到达i == 1吗?无论如何,它将在检查myVec [0]时返回。

相关问题