在for循环中使用模数

时间:2011-09-22 03:25:41

标签: c for-loop modulo

我试图了解如何使用mod运算符重复循环。

如果您有两个字符串,"abc""defgh"%如何使用abc进行循环,重复defgh到达了?也就是说,abcdefgh的长度的mod关系是什么?

我真的不明白这个概念。

2 个答案:

答案 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将始终返回0N-1之间的值。在这种特殊情况下,我们还利用了这样一个事实:如果将x增加1 x % N也会增加1.看到它?

我们在这里使用的模数的另一个重要特性是它“滚过”的事实。当您将x增加1时,x % N会增加1.当它达到N-1时,下一个值将为0,依此类推。

看看@Daniel的代码。它是C ++,但这个概念与语言无关