好的,我现在已经完成了这项工作,并且我已经编辑过这篇文章和代码,以反映更新后的正确工作代码。
从文本文件中将50个单词读入字符串数组
该程序将使用随机数:
a.-它将生成一个介于2和7之间的随机数,用于选择句子中使用的单词
b.-它将为选择单词生成一个随机数。数字将在0到49之间,因为它们是数组中单词的位置
它会在屏幕上显示句子。
提前感谢您提出任何建议
#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();
}
答案 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
。