C ++打开file.txt并取一个随机字(每行一个字)

时间:2018-03-16 15:23:42

标签: c++ file text

我从c ++开始,我只是做一个迷你游戏,我想打开我的file.txt,其中包含:

Hello
Test
Random
Mysterious
Nice
Good
Uber
Facebook
etc...

在我的代码中,我在变量中添加了一个词:

  

RandName

所以我怎么能打开一个file.txt,在我的文件中随机插入一个字并插入我的游戏中。我想我必须使用ofstream,但我真的不知道如何使用它。

代码:

#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;


string Shake(string str){

string melange;
int i(0);

while (str.size() != 0){

  i = rand() % str.size();
  melange += str[i];
  str.erase(i, 1);
 }

 return melange;
}

int main(){

std::cout << "Welcome to secret word : ";
string RandName("Random");
string Reponse("");
string RandNameShake("");
int cpt(0);
int lose(10);
int Replay(0);

srand(time(0));

std::cin >> Reponse;

while (RandName != Reponse && lose != 0) {
        RandNameShake = Shake(RandName);
        std::cout << "Wrong word ! " << '\n';
        std::cout << endl << "The secret word is : " << RandNameShake << endl;
        std::cout << "HIT : " << lose << '\n';
        std::cout << endl << "Try again : ";
        std::cin >> Reponse;
        cpt++;
        lose--;
}
if (lose == 0 ) {
    std::cout << endl << "Sorry you don't find the word ... " << '\n';
    std::cout << endl << "The word was : " << RandName <<'\n';
    std::cout << endl << "An other game ? 1/Yes 2/No" << '\n';

    std::cin >> Replay;
}
else
 std::cout << endl << "Good Game yu find the word in " << cpt << " hits" << endl;
 std::cout << endl << "An other game ? 1/Yes 2/No" << '\n';

 std::cin >> Replay;

if (Replay == 1) {
    main();
}
else if (Replay == 2) {
    std::cout << "All right see you soon :) !" << '\n';
    return 0;
}
else
     std::cout << "Don't understand i close the program" << '\n';
     return 0;

return 0;
}

1 个答案:

答案 0 :(得分:0)

这听起来很像家庭作业,所以我会为你留下代码并限制一般方向的答案。

  

我想我必须使用ofstream

再试一次。 ofstream顾名思义就是输出,在这种情况下你需要的是输入。

获取一个随机单词 - 一个效率低下的本机解决方案将涉及计算行/单词的数量,随机选择一个并跳过前直到达到它。然而,这涉及许多可以避免的不必要的操作。

另一种解决方案,以不同的方式效率低下,将涉及将所有单词读入容器并随机选取单词容器中的索引。但是,如果您要进行大量随机选择,那么该解决方案可能会更有效率。

对于单个单词,最好随机选择文件中的位置并向前搜索,直到找到下一个新行,并从该位置读取一行。如果你没有找到一个到达终点,这意味着该位置恰好位于最后一行,所以你需要返回,直到找到第一个新行,它将代表文件中的最后一行并读取它。

在任何一种情况下,您最终都会以最小的开销随机选择一个单词。