当我尝试用cout显示随机生成的字符串rnd时,我只得到endlines作为输出。为什么这样,我该如何解决?另外,while语句创建了一个无限循环。我没有正确比较字符串吗?我正在使用g ++编译器。
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main()
{
string str;
string rnd;
int x;
cout << "What do you want the string to be?" << endl;
cin >> str;
srand(1);
//assign the initial random string
for(int i = 0; i < str.size(); i++)
{
x = rand() % 26 + 97;
rnd[i] = static_cast<char>(x);
}
cout << rnd << endl;
//change individual characters of the string rnd until rnd == str
while(str != rnd)
{
for(int i = 0; i < str.size(); i++)
{
if (rnd[i] == str[i])
{
continue;
}
else
{
x = rand() % 26 + 97;
rnd[i] = static_cast<char>(x);
}
}
cout << rnd << endl;
}
return 0;
}
答案 0 :(得分:2)
在rnd.resize(str.size());
之后添加cin >> str;
。 rnd
不包含任何字符,因此您需要将字符串的大小调整为与str
相同的大小。
答案 1 :(得分:2)
你永远不会改变rnd
的大小,因此它总是为0.当i&gt;时,设置(或获取)rnd [i] rnd.size()是未定义的行为,但即使它“有效”(例如,因为您的实现使用短字符串优化而且所有单词都很短),str == rnd
因为它们的大小而永远不会出现这种情况是不同的。
我建议:
rnd.push_back('a' + rand() % 26);
在初步建设中。在while
循环内,您可以使用rnd[i]
,因为那时rnd
的大小合适。