Я получил домашнее задание, но не знаю, что именно делать.
Входной файл генерируется случайным образом из буквы от «а» до «z». Пользователь будет вводить маску только с 0/1, например, 011011, где 1 означает гласный, а 0 — согласный.
Выходными данными будут все совпадения, найденные на входе, которые соответствуют заданной пользователем маске (например, для 011011 вывод будет abbezz).
Есть идеи, как это сделать? Я не прошу код, но только для простого способа, как сделать это возможным в c / c ++.
Спасибо
Сопоставьте строку с 0/1 в соответствии с вашими правилами и найдите в новой строке подстроки, соответствующие маске.
Насколько я понимаю, необходимо найти все последовательности букв, которые соответствуют маске.
Дана маска: 010 (согласный, гласный, согласный)
Вот совпадения на пару слов:
"are" - fail, first character is a vowel.
"mat" - pass, 'm' is a consonant, 'a' is a vowel, 't' is a consonant.
"mate" - fail, too many letters.
Вам понадобятся некоторые функции, которые проверяют букву на гласный или согласный.
Также рассмотрите возможность использования конечного автомата. Если тест не пройден, вы хотите вернуться в исходное состояние.
Сначала запишите свой алгоритм, шаг за шагом. Придумайте несколько тестовых примеров, чтобы проверить ваш алгоритм. После того, как алгоритм работает, закодируйте его. Используйте те же тесты для проверки программы.
Я до сих пор не знаю точно, что вы пытаетесь достичь, но, возможно, это поможет узнать, что, как только вы введете данные в std :: string, вы можете перебирать символы, используя итераторы и любой алгоритм. Вот пример с std::for_each
:
#include <algorithm>
#include <iostream>
#include <string>
void applyMask(std::string::reference aCharacter)
{
// apply your mask here, character by character
if ('a' == aCharacter) {
aCharacter = 'A';
}
}
int main()
{
std::string s("stackoverflow");
std::for_each(s.begin(), s.end(), &applyMask);
std::cout << s << std::endl;
}
Возможно, вы захотите взглянуть на std::transform
например, http://www.cplusplus.com/reference/algorithm/transform/