Проблема с выписыванием альтернативного ответа
Есть код, задача: я задаю начальную букву, программа выводит слово с этой буквой и его значение. Вот и проблема в том, что если такового слова с буквой нет, то должно выйти предупреждение, но я не знаю как его вывести. Так как работаю с векторами и если получается вывести это предупреждение, то оно будет равно количеству строк в файле, а мне нужно всего один раз. Буду благодарен за помощь.
for(auto &element: cont){
if(element.definition.length() && *element.definition.begin() == letter){ //если есть слово с такой буквой
std::cout << element.definition << " - " << trim(element.discription) << std::endl;
output << element.definition << " - " << trim(element.discription) << std::endl;
output.close();
}else if(element.definition.length() && *element.definition.begin() != letter){ //если слова нет с такой буквой
std::cout << "Нет слова с такой буквой в начале" << std::endl;
}
}
Ответы (1 шт):
Самый хороший способ - использовать std::find_if. Так как информации о типах в приведенном коде не хватает, пишу приблизительно. Но тут нужно немножко постараться. Возможно, нужно будет поправить чуточку. Element_t - это так я назвал тип, который имеет элемент cont.
auto it = std::find_if(cont.begin(), cont.end(), [letter](const Element_t& element) {
// тут нужно написать правильное условие, которое будет проверять наш element
return !element.definition.empty() && element.definition[0] == letter
});
if (it == cont.end()) {
std::cout << "ой, ничего не нашли";
} else {
std::cout << it->definition << " - " << trim(it->discription) << std::endl;
}
вот это - element.definition.length() - очень плохой вариант. есть же empty() - и очевиднее, и красивее
Я также случайно потерял вывод в output, но думаю, это легко допишите сами.
Но если нужно найти все варианты, то можно где то так
auto condition = [letter](const Element_t& element) {
// тут нужно написать правильное условие, которое будет проверять наш element
return !element.definition.empty() && element.definition[0] == letter
};
auto it = std::find_if(cont.begin(), cont.end(), condition );
if (it == cont.end()) {
std::cout << "ой, ничего не нашли";
} else {
for (;it != cond.end(); it = std::find_if(++it, cont.end(), condition );) {
std::cout << it->definition << " - " << trim(it->discription) << std::endl;
}
}