Si hay un limite en el máximo de palabras del historial y este es relativamente pequeño basta con declarar un array de arrays de caracteres:
- #include <iostream> 
- using std::cin; 
- using std::cout; 
- using std::endl; 
-   
- #include <cstring> 
- using std::strcmp; 
- using std::strcpy; 
-   
- const int max_palabras = 4; 
- const int chars_x_palabra = 32; 
-   
- int main() 
- { 
-    char palabra[max_palabras][chars_x_palabra]; 
-    char aux[chars_x_palabra]; 
-    int num_palabras = 0; 
-   
-    for (int i = 0; i != max_palabras; ++i){ 
-       cout << "Introduce una palabra: "; 
-       cin >> aux; 
-   
-       int j; 
-       for (j = 0; j != num_palabras && strcmp(aux, palabra[j]); ++j) 
-          ; 
-       if (j == num_palabras) 
-          strcpy(palabra[num_palabras++], aux); 
-       else 
-          cout << "Palabra repetida" << endl; 
-    } 
-   
-    for (int i = 0; i != num_palabras; ++i) 
-       cout << "Palabra " << (i + 1) << ": " << palabra[i] << endl; 
-   
-    return 0; 
- } 
Pero si debes aceptar un numero arbitrario de palabras lo mejor es utilizar un puntero de tipo "char **" junto con las funciones malloc, calloc y realloc.
Un detalle que debe cambiarse si o si en el programa es el uso de cin por una forma segura de leer una palabra evitando el desbordamiento.
Ya por ultimo yo no lo haría de esa forma, si estas aprendiendo C++ lo políticamente correcto es utilizar vector + string + getline y así terminas con un programa mas corto y seguro.
Un saludo