Pregunta

Así que me sentía aburrido y decidí que quería hacer un juego del ahorcado. Hice una tarea como esta en la escuela secundaria cuando tomé C ++ por primera vez. Pero esto fue antes incluso de que yo también tuviera geometría, así que desafortunadamente no me fue bien de ninguna manera o forma en él, y después del semestre destrocé todo en un ataque de ira.

Estoy buscando hacer un documento txt y simplemente agregar un montón de palabras (es decir: prueba amor hambre desconcertado descombobulado tarta torpe tú obtener la idea )

Entonces esta es mi pregunta: ¿Cómo consigo que C ++ lea una palabra aleatoria del documento?

Tengo la sensación de que se necesitará #include<ctime>, así como srand(time(0)); para obtener algún tipo de elección pseudoaleatoria ... pero no tengo la menor idea de cómo tomar una palabra aleatoria de un archivo ... ¿Alguna sugerencia?

¡Gracias de antemano!

¿Fue útil?

Solución

Aquí hay un bosquejo aproximado, asumiendo que las palabras están separadas por espacios en blanco (espacio, tabulación, nueva línea, etc.):

vector<string> words;
ifstream in("words.txt");
while(in) {
  string word;
  in >> word;
  words.push_back(word);
}

string r=words[rand()%words.size()];

Otros consejos

El operador > > usado en una cadena leerá 1 palabra (blanca) separada por espacios de una secuencia.

Entonces, la pregunta es si desea leer el archivo cada vez que elige una palabra o desea cargar el archivo en la memoria y luego recoger la palabra de una estructura de memoria. Sin más información, solo puedo adivinar.

Elija una palabra de un archivo:

// Note a an ifstream is also an istream. 
std::string pickWordFromAStream(std::istream& s,std::size_t pos)
{
    std::istream_iterator<std::string> iter(s);
    for(;pos;--pos)
    {    ++iter;
    }

    // This code assumes that pos is smaller or equal to
    // the number of words in the file
    return *iter;
}

Cargar un archivo en la memoria:

void loadStreamIntoVector(std::istream& s,std::vector<std::string> words)
{
    std::copy(std::istream_iterator<std::string>(s),
              std::istream_iterator<std::string>(),
              std::back_inserter(words)
             );
}

Generar un número aleatorio debería ser bastante fácil. Asumiendo que solo quieres psudoaleatorio.

Recomendaría crear un archivo de texto sin formato (.txt) en el Bloc de notas y usar las API estándar de archivos C ( fopen () y fread ( ) ) para leerlo. Puede usar fgets () para leer cada línea de una en una .

Una vez que tenga su archivo de texto plano, simplemente lea cada línea en una matriz y luego elija aleatoriamente una entrada en la matriz usando el método que ha sugerido anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top