2013-04-08 4 views
0

Использование #include <boost/algorithm/string.hpp> для сравнения std::string с std::vector<std::string>подталкивание :: Алгоритм :: сравнить & Const символ

std::string commandLine 

std::string::size_type position 

std::string delimiters[] = {" ", ",", "(", ")", ";", "=", ".", "*", "-"}; 
std::vector<std::string> lexeme(std::begin(delimiters), std::end(delimiters)); 

Проведено сравнение

while (!boost::algorithm::contains(lexeme, std::to_string(commandLine.at(position)))){ 
    position--; 
} 

Формирует следующее сообщение об ошибке

Error 1 error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const char' (or there is no acceptable conversion) 

const char? Я не определяю строки?

+0

могли бы вы построить минимальную TestCase? – jrok

+0

В приведенном выше разделе «Сравнение» находится фактический код (или тестовый файл), который сгенерировал ошибку, используя 'boost :: algorithm :: compare' – Mushy

+0

Я имел в виду полный источник с заголовками и объявлениями, которые люди могут скопировать вставку и попробовать сами. Реальный код, например, 10 строк или что-то в этом роде. – jrok

ответ

1

boost::algorithm::contains проверяет, является ли одна последовательность содержится в другом, не является ли один элемент содержится в последовательности. Вы передаете последовательность строк и последовательность символов (ака строка); следовательно, ошибка, когда он пытается сравнить строку с символом.

Вместо этого, если вы хотите, чтобы найти строку в последовательности строк, используйте std::find:

while (std::find(lexeme.begin(), lexeme.end(), 
       std::to_string(commandLine.at(position))) == lexeme.end()) 
{ 
    --position; 
} 
+0

Отсутствует лишний ')' после 'commandLine.at (position)) == ...' и я бы сравнивал в bool-стиле 'std :: find! = Lexeme.end()'? – Mushy

+0

@ Муши: Да, отсутствовал ')'. Ваш код пытается выполнить 'while (not found)', который является 'while (find() == end())', так как 'find' возвращает найденный им итератор или' end() ', если он ничего не находит , –

Смежные вопросы