2015-09-11 90 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]時返回。

相關問題