我想创建一个c++程序,它将在运行时生成一个用户指定长度(即最小值和最大值)的随机字符串
I want to create a c++ program that will generate a random string of user specified lenght (i.e min and max) at runtime
目标是使用用户定义的函数创建它。这样的C++程序具有用户定义的功能(名称:GenerateRandomWords(,其功能是使用英文字母生成随机单词。将所有这些单词保存在文本文件(名称:Output.txt(以及字符串类型的数组中。作为一个安装程序,我面临的问题是它成功地生成了第一个单词并将其存储在字符串中,但当循环开始生成第二个单词时,程序会运行一段时间,然后结束。这是代码,提前感谢您的帮助:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
static const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum)-1;
char genRandom()
{
return alphanum[rand() % stringLength];
}
int main()
{
int n = 0, a = 0;
cout << "Howe many strings you want to generatet";
cin >> n;
cout << "Lenght of each :t";
cin >> a;
string le;
string ar[] = { "" };
for (int i = 0; i < n; i++)
{
for (int j = 0; j < a; j++)
{
le += genRandom();
}
ar[i] = le;
le = "";
cout << ar[i] << endl;
}
cout << "Out of both loopn";
for (int i = 0; i < n; i++)
cout << ar[i] << endl;
}
在这一行:
string ar[] = { "" };
您正在创建一个大小为1的字符串数组。因此,当您尝试将第二个字符串添加到此数组中时,就会调用未定义的行为。如果你只使用vector<string>
,你就不会有这个问题:
vector<string> ar;
在你正在做的线上:
ar[i] = le;
你应该这样做:
ar.push_back(le);
这是一个工作演示。
此外,你的"随机"选择也不是很随机。查看random
标头,了解如何更好地做到这一点。
根据您的要求,您需要使用指定的字符阵列变量alphanum
来获取每个字符串的长度和要打印的字符串数,并创建output.txt
来保存它。
考虑以下代码:
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <fstream>
const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
void generate(int, int);
void setOutput(char[]);
main(void)
{
int length, strings;
std::cout << "How many strings & length (sep. by SPACE): ";
std::cin >> strings >> length;
srand(time(0));
generate(length, strings);
return 0;
}
void generate(int len, int str)
{
char array[len];
int max = sizeof(alphanum) / sizeof(alphanum[0]);
std::ofstream output("output.txt");
for (int k = 1; k <= str; k++)
{
for (int i = 0; i <= len; i++)
array[i] = alphanum[(rand() % max) + 1];
std::cout << array << std::endl;
output << array << std::endl;
}
}
输出
How many strings & length (sep. by SPACE): 5 5
5Xe*%%
xOD8TQ
YfrM*X
#j&L5&
U8*EYB
注意:首先,记住
srand()
会让随机值在每次执行程序时发生变化。其次,此程序将生成一个output.txt
以满足您的标准。
尽情享受吧!
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用递归的数组的最小值.这是怎么回事
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- txt 文件中浮点数的最大和最小值
- 余数运算符的等效操作,用于处理低于允许的最小值
- 使用数组将最后一个最大值更改为第一个最小值
- rand()不起作用,给了我一个超出指定的最大值和最小值的数字
- 在C++中,我需要创建一个程序,该程序在输入某个数字时循环并停止,然后显示最大值和最小值
- C++列表处理:将最小值初始化为列表的第一个值
- 为什么我的c++算法总是为一个数字的最小值和最大值返回相同的值
- 需要帮助编写一个函数来查找n维数组中的最大值和最小值
- 找到并返回比平衡树的q大的下一个最小值
- 创建一个3x3x3阵列.用0到9之间的随机值填充.输出数组.找出3个最小值和3个最大值的输出
- 我如何实现一个通用的最小值
- 在一个非常小的数组中找到最小值