如何将数字包装到一个范围中
How to wrap a number into a range?
我有一个程序,它接受字符串中的每个字符。 向其添加一个数字 x(x 每次添加到字符时都会增加)。我需要新字符 (c+x) 在范围 [32,126] 内。
我知道使用 %126 来保持 c+x<126,但我如何确保>32 并且数字在该范围内"换行"?
这是我的代码:
string a;
unsigned int x = 1;
cin >> a;
for (auto &c : a)
{
if (c <= 126 && c >= 32)
{
if (c + x > 126) //checking if c needs to be wrapped
{
c = (c + x) % (126); //wrapping c? <-- this is the problem
}
else
{
c += x;
}
if (x == 256)
{
x = 1;
}
else
{
x++;
}
}
cout << c;
}
编辑:我想出了包装它的行应该是:
c = 31 + (c + x) % (126);
我意识到我已经尝试过这个,但用 32 而不是 31,这意味着它会将其排除在包装到 32 之外。
UPD:请参阅下面的@Ky评论,我稍后会更新答案。
由于%
运算符允许您获得[0; limit)
空间,因此当您需要[start; limit)
空间时,标准方法是通过运算符获取空间[0; limit - start]
%
然后将其添加到start
。这样,您将获得[start; limit)
空间。所以公式将是
numberToBeWrapped = start + (numberToBeWrapped - start) % (limit - start)
或者,在您的情况下:
c = 32 + (c + x - 32) % (126 - 32);
int wrapSpaceSingle(int start, int end, int wrapNum) {
int out = ((wrapNum % (end - start)) + (end - start)) % (end - start) + start;
return out;
}
这应该行得通。
相关文章:
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何设置一个范围来提取我想要获得的信息
- 不计算一个范围内的完美数
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 在 C++20 中将多个范围适配器连接到一个范围中
- 如何将一个范围替换为矢量中的另一个范围?
- 将整数范围映射到另一个范围
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 我已经编写了C++代码将 boost::optional 视为一个范围,但它无法编译
- 当在另一个范围中,将SelfAdjointeigensolver保存为成员的结果被重新引入
- C :在一个范围内计数偶数 /奇数
- 删除重复的元素并给出一个范围总和
- 为什么即将到来的范围库不支持一个范围的容器初始化
- 将无符号整数加法/减法括在一个范围周围
- 更快的方法将数字从范围转换为另一个范围
- 在一个范围内的阵列中找到三胞胎
- 如何在C++中选择多维数组中的一个范围
- 如何检查一个范围内的值是否是另一个范围内的值的倍数
- 将 std::vector<int> 设置为一个范围
- 正在检查排序列表中是否有一个范围内的数字