我试图了解如何使用mod运算符重复循环。
如果您有两个字符串,"abc"
和"defgh"
,%
如何使用abc
进行循环,重复defgh
到达了?也就是说,abc
和defgh
的长度的mod关系是什么?
我真的不明白这个概念。
答案 0 :(得分:2)
简单。
std::string abc("abc");
std::string defgh("defgh");
for (size_t i = 0; i < defgh.length(); ++i)
{
printf("%c", abc[i % abc.length()]);
}
考虑模数运算符正在做什么,它将左侧与左侧分开,然后向后吐出整数余数。
示例:
0 % 3 == 0
1 % 3 == 1
2 % 3 == 2
3 % 3 == 0
4 % 3 == 1
在我们的例子中,左侧表示“defgh”中的第i个位置,右侧表示“abc”的长度,结果是“abc”中的循环索引。
答案 1 :(得分:2)
mod
的典型用法是生成固定范围内的值。在这种情况下,您需要介于0和strlen("abc")-1
之间的值,以便您不会访问"abc"
之外的位置。
您需要牢记的一般概念是x % N
将始终返回0
和N-1
之间的值。在这种特殊情况下,我们还利用了这样一个事实:如果将x
增加1 x % N
也会增加1.看到它?
我们在这里使用的模数的另一个重要特性是它“滚过”的事实。当您将x
增加1时,x % N
会增加1.当它达到N-1
时,下一个值将为0
,依此类推。
看看@Daniel的代码。它是C ++,但这个概念与语言无关