循环中的RNG和字符串数组中的打印字

时间:2015-09-29 02:52:44

标签: c++ arrays string random

好的,我现在已经完成了这项工作,并且我已经编辑过这篇文章和代码,以反映更新后的正确工作代码。

  1. 从文本文件中将50个单词读入字符串数组

  2. 该程序将使用随机数:

    a.-它将生成一个介于2和7之间的随机数,用于选择句子中使用的单词

    b.-它将为选择单词生成一个随机数。数字将在0到49之间,因为它们是数组中单词的位置

  3. 它会在屏幕上显示句子。

  4. 提前感谢您提出任何建议

    #include <string>
    #include <iostream>
    #include <fstream>
    #include <time.h>
    #include <stdlib.h>
    #include <array>
    
    using namespace std;
    
    int main() {
    ofstream outFile;
    ifstream inFile;
    const int size = 50; //initiate constant size for array
    string word[size]; //initialize array of string
    srand(time(0)); //sets timing factor for random variables
    
    int Random2 = rand() % 6 + 2; //determines random value beteen 2 and 7
    inFile.open("words.txt");   //opens input text file
    if (!inFile.is_open()) { //tests to see if file opened corrected
        exit(EXIT_FAILURE);
    }
    while (!inFile.eof()) { //Puts file info into string
        for (int i = 0; i < size; ++i)
        inFile >> word[i];
    }
    for (int i = 0; i < Random2; i++) { //loops through array and generates    second random variable each loop to determine word to print
        int Random1 = rand() % size;
        cout << word[Random1] << " ";
    }
    cin.get();
    }
    

2 个答案:

答案 0 :(得分:1)

int generateRandom()
{
    default_random_engine generator;
    uniform_int_distribution<int> distribution(0, 49);
    int random = distribution(generator);  // generates number in the range 0..49
    return random;
}

问题是每次调用getRandom()函数时都会创建一个新的PRNG实例。因此,每个实例只调用一次,第一个结果始终相同。

相反,您想要创建一次实例并多次调用 相同的 实例。

default_random_engine generator;
uniform_int_distribution<int> distribution(0, 49);

for (int i = 0; i < 5; ++i)
{
    std::cout << distribution(generator) << std::endl;
}
  

cout << words[generateRandom()]

words被声明为类型std::string。使用[]访问字符串中的单个字符。你在这里期待什么?你打算有一个字符串数组(即文本文件中每行一个)?如果是这样,您需要std::vector<std::string> words之类的内容。现在使用words[0]访问数组中的元素,每个元素的类型为std::string(与之前的单个字符相反)。

答案 1 :(得分:0)

对于打印单个字符,您只需打印字符,因为[]运算符对字符串起作用。您需要对字符串进行标记。请参阅strtok