C ++ генерирует следующий ключ - PullRequest
0 голосов
/ 28 января 2011
const int SIZE = 3;
const char val[SIZE] = {'3', 'z', '7'};

const string& next(){
   static string ret = "0";
   static unsigned i = 0;
   static unsigned j = 0;
   s[j] = val[i];
   i++;

   return ret;

//...
}

Каждый раз, когда вызывается next, я хочу, чтобы он возвращал следующий строковый ключ, например:

3
z
7
33
3z
37
z3
zz
z7
73
7z
77
333
33z
...

val [] может быть любого размера с любыми значениями. Моя реализация неверна и неполна, и я не могу обернуть ее вокруг. Кто-нибудь может помочь?

Ответы [ 3 ]

1 голос
/ 28 января 2011
const string& next(){
    static int pos = 1;
    static string s;
    s.clear();
    int n = pos++;
    while (n){
        s += val[(n-1) % SIZE];
        // use s = val[(n-1] % SIZE] + s; for inverse order.
        n = (n-1) / SIZE;
    };
    return s;
};
0 голосов
/ 28 января 2011

Вы хотите отформатировать число в базе 3 с необычными символами для ваших цифр. Вы можете использовать itoa для преобразования в базу 3, а затем изменить строку, изменив 0 на 3, 1 на z и 2 на 7.

0 голосов
/ 28 января 2011

С точки зрения того, чтобы обернуть вокруг него голову, вы можете думать об этом, как если бы вы увеличивали число.Увеличьте крайнее правое значение, но если оно выходит за пределы конца, затем установите его обратно в первое значение и увеличьте значение следующего столбца и т. Д., А затем добавьте дополнительное значение впереди, если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...