Почему cout не отображает строковую переменную rnd?

Когда я пытаюсь отобразить случайно сгенерированную строку rnd с помощью cout, я получаю только конечные строки в качестве вывода. Почему это и как я могу это исправить? Кстати, оператор 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;
}

2

Решение

добавлять rnd.resize(str.size()); после cin >> str;, rnd не содержит символов, поэтому вам нужно изменить размер строки до того же размера, что и str,

2

Другие решения

Вы никогда не меняете размер rnd, так что всегда будет 0. Установка (или получение) rnd [i], когда i> rnd.size () — неопределенное поведение, но даже если оно «работает» (скажем, потому что ваша реализация использует оптимизацию коротких строк и все ваши слова короткие), это никогда не будет так, что str == rnd потому что их размеры разные.

Я бы предложил:

rnd.push_back('a' + rand() % 26);

в начальном строительстве. Внутри while цикл, вы можете использовать rnd[i] потому что к тому времени rnd имеет правильный размер.

2