Я заменил ваш алгоритм поиска методом explode
, который разделяет вашу строку разделителем и возвращает вектор, который лучше подходит для поиска и получения количества элементов:
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <algorithm>
std::vector<std::string> explode(const std::string& s, char delim)
{
std::vector<std::string> result;
std::istringstream iss(s);
for (std::string token; std::getline(iss, token, delim); )
{
result.push_back(std::move(token));
}
return result;
}
int main()
{
std::string items = "box,cat,dog,cat";
std::string item1 = "dog";
char delim = ',';
auto resultVec = explode(items, delim);
auto itResult = std::find_if(resultVec.begin(), resultVec.end()
, [&item1](const auto& resultString)
{
return item1 == resultString;
});
if (itResult != resultVec.end())
{
auto index(std::distance(resultVec.begin(), itResult) + 1); // index is zero based
std::cout << index;
}
return 0;
}
Используя std::find_if
вы можете получить позицию item1
с помощью итератора, который вы можете использовать с std::distance
, чтобы получить количество элементов, которые находятся перед ним.
Кредиты для explode
метода go к этому сообщению: Есть ли в C ++ эквивалент PHP-функции explode ()?