Как вы читаете слово из файла в C ++? - PullRequest
2 голосов
/ 09 марта 2009

Так что мне стало скучно, и я решил сделать игру палачом. Я выполнил такое задание еще в старшей школе, когда впервые взял C ++. Но это было еще до того, как я стал слишком геометричным, так что, к сожалению, я не очень хорошо справлялся с какой-либо формой или формой, и после семестра я все разгромил.

Я хочу сделать текстовый документ и просто добавить целую кучу слов (То есть: тестовое задание любить hungery flummuxed discombobulated пирог неловко вы получить идея )

Так вот мой вопрос: Как заставить C ++ прочитать случайное слово из документа?

У меня есть ощущение, что понадобится #include<ctime>, а также srand(time(0));, чтобы получить какой-то псевдослучайный выбор ... но я не представляю, как получить случайное слово из файла ... . Любые предложения?

Спасибо заранее!

Ответы [ 3 ]

7 голосов
/ 09 марта 2009

Вот примерный набросок, предполагая, что слова разделены пробелами (пробел, табуляция, новая строка и т. Д.):

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

string r=words[rand()%words.size()];
1 голос
/ 09 марта 2009

Оператор >>, используемый в строке, будет читать 1 (белое) разделенное пробелами слово из потока.

Итак, вопрос в том, хотите ли вы читать файл каждый раз, когда выбираете слово, или вы хотите загрузить файл в память, а затем забрать слово из структуры памяти. Без дополнительной информации я могу только догадываться.

Выберите слово из файла:

// 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;
}

Загрузить файл в память:

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)
             );
}

Генерация случайного числа должна быть достаточно простой. Предполагая, что вы хотите только псевдослучайный.

0 голосов
/ 09 марта 2009

Я бы порекомендовал создать простой текстовый файл (.txt) в Блокноте и использовать стандартные API-интерфейсы файлов C ( fopen () и fread () ) для чтения из него. , Вы можете использовать fgets () для чтения каждой строки по одной.

Как только у вас есть простой текстовый файл, просто прочитайте каждую строку в массив, а затем случайным образом выберите запись в массиве, используя метод, который вы предложили выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...