Wczytujesz sobie z pliku te słowa, zapisujesz w vectorze. Dobrze by było zrobić kilka takich vectorów, każdy przechowywałby słowa o zadanej długości - dzięki temu będziesz miał mniej roboty z wyszukiwaniem.
Możesz w pętli po kolei sprawdzać, czy dane słowo pasuje do odpowiadającego z indeksu.
Nieidealny przykład:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
// pomijam wczytywanie z pliku, pomijam inne vectory dla innych długości słów
vector <string> words4 {"kawa", "koka", "koło", "ryba", "woda"};
// pomijam wczytanie wzorca, sprawdzenie jego długości i poprawności
string key = "*o**";
bool correct; // flaga oznaczająca czy aktualnie przetwarzane słowo z vectora jest zgodne ze wzorcem
for(const auto &s: words4) // iteruję po odpowiednim vectorze
{
correct = true; // zakładam, że dane słowo jest poprawne
for(int i = 0; i < key.length(); ++i) // iteruję po znakach w słowie i kluczu
{
if(key[i] == '*') continue;
if(key[i] != s[i]) // jeśli chociaż jeden znak się nie zgadza, to całe słowo się nie zgadza
{
correct = false;
break;
}
}
if(correct)
{
// whatever, wydrukuj albo coś:
cout<<s<<endl;
}
}
}