Поиск в контейнере (vector) по первой букве

188
27 мая 2018, 15:20

Как реализовать поиск по первой букве строки и вывод найденных строк?

Answer 1

напишите в лоб

char c = '.';// нужный символ
for (size_t i = 0; i < vec.size(); i++) {
  if (vec[i].length() < 1) continue;
  if (vec[i][0] == c) cout << "vec[i] << endl;
}

по желанию, цикл можно заменить на for(auto s : vec) и чуточку поправить тело.

Answer 2
    std::vector<std::string> v;
    v.push_back(std::string("abc"));
    v.push_back(std::string("dbc"));
    v.push_back(std::string("fbc"));
    v.push_back(std::string("fbcd"));
    struct find_func
    {
        char m_letter;
        find_func(const char letter) 
            :m_letter(letter) 
        { }
        bool operator()(const std::string &value) const 
        {
            return (value[0] == m_letter);
        }
    };
    do
    {
        res = std::find_if(v.begin(), v.end(), find_func('f'));
        if (res != v.end())
        {
            // делаем что нам надо со строкой *res
            res ++;
        }
    } while (res != v.end();

Наверное есть варианты и короче - чтобы результат поиска сразу в массив записывался например

Answer 3

вот попроще :)

struct find_func
{
    char m_letter;
    find_func(const char letter) 
        :m_letter(letter) 
    { }
    bool operator()(const std::string &value) const 
    {
        return (value[0] == m_letter);
    }
};
std::vector<std::string> v;
v.push_back(std::string("abc"));
v.push_back(std::string("dbc"));
v.push_back(std::string("fbc"));
v.push_back(std::string("fbcd"));
std::vector<std::string> res(v.size());
std::copy_if(v.begin(), v.end(), res.begin(), find_func('f'));

А с лямбда еще проще

std::vector<std::string> v;
v.push_back(std::string("abc"));
v.push_back(std::string("dbc"));
v.push_back(std::string("fbc"));
v.push_back(std::string("fbcd"));
std::vector<std::string> res(v.size());
std::copy_if(v.begin(), v.end(), res.begin(), [](const std::string& value) {return (value[0] == 'f');});
READ ALSO
Нужна помощь с консольной игрой [закрыт]

Нужна помощь с консольной игрой [закрыт]

Делаю консольную игру, гонки из тетриса) Сделал движение, символ двигается по карте, но заходит за рамки, что то наделал что теперь если заезжает...

207
Идеально сбалансированное дерево-C++ [закрыт]

Идеально сбалансированное дерево-C++ [закрыт]

Нужно определить высоту узлаДумаю, нужно при помощи функции обхода дерева подсчитать высоту, вот только с реализацией проблемы

190
Запись и чтение вектора объектов класса в файл

Запись и чтение вектора объектов класса в файл

Возникла проблемаЯ изучил абсолютно все, что смог найти

216