#c
#c #c 11 #stdstring
Вопрос:
Я хочу написать функцию, которая определяет, содержатся ли все буквы введенного слова в другой строке допустимых букв.
bool ContainsOnly(std::string inputtedWord, std::string acceptableLetters)
{
// ... how do I write this?
}
Вот мой фреймворк для тестирования:
bool Tester(std::string inputtedWord, std::string acceptableLetters)
{
if (ContainsOnly(inputtedWord, acceptableLetters)) {
std::cout << "Good!" << std::endl;
return true;
}
else {
std::cout << "No good!" << std::endl;
return false;
}
}
int main()
{
std::string acceptableLetters;
std::string inputtedWord;
std::cout << "Please input the acceptable letters in your words: " << std::endl;
std::cin >> acceptableLetters;
while (inputtedWord != "STOP")
{
std::cout << "Please input the word you would like to test: (type STOP to end testing): " << std::endl;
std::cin >> inputtedWord;
Tester(inputtedWord, acceptableLetters);
}
return 0;
}
Я хочу получить следующий результат:
Пожалуйста, введите приемлемые буквы в ваших словах: КОДИРОВАНИЕ
Пожалуйста, введите слово, которое вы хотели бы протестировать: (введите STOP, чтобы завершить тестирование): МОНЕТА
Хорошо!
Пожалуйста, введите слово, которое вы хотели бы протестировать: (введите STOP, чтобы завершить тестирование): COP
Ничего хорошего!
Комментарии:
1. Вот простой способ выяснить, как это сделать, и он никогда не перестает работать. Просто достаньте чистый лист бумаги. Запишите, используя короткие, простые предложения на простом английском языке, пошаговый процесс выполнения этого. Когда закончите, позвоните своей резиновой утке, чтобы договориться о встрече . Мы не пишем код для других людей в Stackoverflow. Мы всегда обращаемся с такими вопросами к вашей резиновой утке. После того, как ваш резиновый утенок одобрит предложенный вами план действий, просто возьмите то, что вы записали, и переведите это непосредственно на C . Миссия выполнена!
Ответ №1:
Вы можете использовать find_first_not_of следующим образом:
bool ContainsOnly(std::string inputtedWord, std::string acceptableLetters)
{
return inputtedWord.find_first_not_of(acceptableLetters) == std::string::npos;
}
Вот демонстрация.
Ответ №2:
- Поместите все допустимые символы в
std::set
. - Оцените, все ли символы в строках находятся в наборе через
std::all_of
.
#include <set>
#include <algorithm>
bool ContainsOnly(std::string inputtedWord, std::string acceptableLetters)
{
std::set<char> okSet(acceptableLetters.begin(), acceptableLetters.end());
return std::all_of(inputtedWord.begin(), inputtedWord.end(),
[amp;okSet](char c)
{
return okSet.find(c) != okSet.end();
});
}
Комментарии:
1. Я отредактировал вопрос, чтобы поместить логику в функцию вместо
if
оператора, поэтому я также обновил ваш ответ. Надеюсь, все в порядке.