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 []可以是任何值的任何大小。我的实现是错误的和不完整的,我无法绕过它。有人可以帮忙吗?
答案 0 :(得分:1)
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;
};
答案 1 :(得分:0)
就缠绕它的头部而言,你可以像想要增加一个数字一样思考它。增加最右边的值,但是如果超过结束,则将其设置回第一个值并增加下一列等,然后在必要时在前面添加额外的值。
#include <iostream>
#include <string>
const int n = 3;
const char val[n] = {'3', 'z', '7'};
const std::string& next()
{
static std::string ret;
if (ret.empty()) return ret = val[0];
for (int i = ret.length() - 1; i >= 0; --i)
if (ret[i] == val[n - 1])
{
// carry situation, reset this column & will increment next...
ret[i] = val[0];
}
else
{
// found existing column with room to increment...
ret[i] = strchr(val, ret[i])[1];
return ret;
}
return ret = val[0] + ret; // add an extra column at left...
}
int main()
{
for (int i = 0; i < 20; ++i)
std::cout << next() << ' ';
std::cout << '\n';
}
答案 2 :(得分:0)
您希望格式化基数3中的数字,并为数字添加不常见的符号。您可以使用itoa
转换为base 3,然后通过将0更改为3,1到z和2到7来修改字符串。