2016-07-09 3 views
0

Мое требование - подсчитать количество вхождений строки внутри вектора строки. Строка, подлежащая поиску, находится в 0-м индексе вектора.count количество вхождений строки в вектор строки

Я использую встроенную функцию count от algorithm заголовка, но получаю странную ошибку компиляции, которую я не могу решить.

Мой код:

vector<string> a={"abc", "def", "abc"}; 
int cnt = count(a.begin(), a.end(), a[0]); 

компиляции сообщение об ошибке:

count(std::vector<std::basic_string<char> >)': 
error: no matching function for call to std::vector<std::basic_string<char> >::iterator, std::vector<std::basic_string<char> >::iterator, __gnu_cxx::__alloc_traits<std::allocator<std::basic_string<char> > >::value_type&)' 
    int cnt = count(a.begin(), a.end(), a[0]); 

Любая помощь? В чем проблема?

+2

[Может не воспроизводить] (http://coliru.stacked-crooked.com/a/5192baa686d1f63a). Пожалуйста, опубликуйте [mcve]. –

+0

Вам не хватает указаний для 'std :: vector'? –

+0

'std :: vector' включен. – mtk

ответ

0

Вы упомянули библиотеку алгоритмов, но обязательно добавьте #include <algorithm>.

С вашего алгоритма хорошо работает здесь код

#include <iostream>  // std::cout 
#include <algorithm> // std::count 
#include <vector>  // std::vector 
#include <string>  // std::vector 

using namespace std; 

int main() { 

    // counting elements in container: 
    vector<string> a {"abc", "def", "abc"}; 
    int cnt = count(a.begin(), a.end(), a.at(0)); 
    std::cout << a.at(0) << " " << cnt << " times.\n"; 

    return 0; 
} 

Компилятор флаг:

-------------- Build: Debug in test (compiler: GNU GCC Compiler)--------------- 

mingw32-g++.exe -Wall -fexceptions -g -Weffc++ -std=c++14 

Кроме того, мое решение может быть полезно для вас

#include <string> 
#include <vector> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    vector<string> stringList; 
    stringList.push_back("abc"); 
    stringList.push_back("def"); 
    stringList.push_back("111 abc"); 
    string searchWord ("abc"); 
    int searchWordSize = searchWord.size(); 
    int count = 0; 

    for (vector<string>::iterator iter = stringList.begin(); iter != stringList.end(); ++iter) { 
     for (size_t pos = 0; pos < (*iter).length(); pos += searchWordSize) { 
      pos = (*iter).find(searchWord, pos); 
      if (pos != string::npos) ++count; 
      else break; 
     } 
    } 

    cout << "Count: " << count << endl; 

    return 0; 
} 
Смежные вопросы