我正在编写一个c ++程序来尝试模拟批处理脚本。目前我正在尝试实现一个可变系统。我已经设置了系统所以每次用户创建一个新变量时,它都会被添加到向量中作为变量的名称,逗号,然后是值。我有一些算法设置为通过分隔符(逗号)拆分字符串并返回一个向量,第一个条目是名称,第二个是值。使用这些算法打印名称时,成功打印变量的名称(在本例中为“test”)。但是,试图在线性搜索算法中使用这个相同的变量,变量是“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;
}
}
}
当用户初始化变量时(在这种情况下,名称为“test”,值为“123”),第一个cout语句将打印“test”。但是,线性搜索算法中的cout
语句打印“test,123”并返回-1。为什么变量在传递给搜索算法时具有不同的值?
如果需要,可以在github repo找到代码的完整副本。
答案 0 :(得分:1)
它没有。您正在输出向量中第一个元素的值,而不是您传递给它的searchKey。
你确实意识到这个循环永远不会到达i == 1,对吗?无论如何,它会在检查myVec [0]时返回。