Когда я пытаюсь отобразить случайно сгенерированную строку 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;
}
добавлять rnd.resize(str.size());
после cin >> str;
, rnd
не содержит символов, поэтому вам нужно изменить размер строки до того же размера, что и str
,
Вы никогда не меняете размер rnd
, так что всегда будет 0. Установка (или получение) rnd [i], когда i> rnd.size () — неопределенное поведение, но даже если оно «работает» (скажем, потому что ваша реализация использует оптимизацию коротких строк и все ваши слова короткие), это никогда не будет так, что str == rnd
потому что их размеры разные.
Я бы предложил:
rnd.push_back('a' + rand() % 26);
в начальном строительстве. Внутри while
цикл, вы можете использовать rnd[i]
потому что к тому времени rnd
имеет правильный размер.