Хранение символов в строках в C++

Итак, прямо сейчас у меня есть этот код, который генерирует случайные буквы с заданным шагом, определяемым пользовательским вводом.

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int sLength = 0;
static const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";

int stringLength = sizeof(alphanum) - 1;

char genRandom()
{
    return alphanum[rand() % stringLength];
}

int main()
{
    cout << "What is the length of the string you wish to match?" << endl;
    cin >> sLength;
    while(true)
    {
        for (int x = 0; x < sLength; x++)
        {
            cout << genRandom();
        }
        cout << endl;
    }

}

Я ищу способ сохранить первое (определяемое пользователем количество) символов в строку, которую я могу использовать для сравнения с другой строкой. Любая помощь приветствуется.


person Cistoran    schedule 20.02.2011    source источник


Ответы (2)


Просто добавь

string s(sLength, ' ');

до while (true) изменить

cout << genRandom();

to

s[x] = genRandom();

в вашем цикле и удалите оператор cout << endl;. Это заменит всю печать, поместив символы в s.

person Jeremiah Willcock    schedule 20.02.2011
comment
Это работает, за исключением строки s(sLength); Выскакивает ошибка. Это недопустимое преобразование из int в const char. - person Cistoran; 20.02.2011
comment
@Cistoran: я предполагал, что это работает как vector (которое можно построить таким образом). Я исправлю это. - person Jeremiah Willcock; 20.02.2011
comment
Лучше сделать s.reserve(sLength) - тогда не надо каждую позицию прописывать дважды. - person Johan Kotlinski; 20.02.2011
comment
@kotlinski: я пишу элементы, используя [], а не push_back, поэтому мне нужно resize, а не reserve; Я думаю, что resize также будет писать во все элементы. - person Jeremiah Willcock; 20.02.2011

Ну, как насчет этого?

    std::string s;
    for (int x = 0; x < sLength; x++)
    {
        s.push_back(genRandom());
    }
person Johan Kotlinski    schedule 20.02.2011