2011-09-22 4 views
1

mod 연산자를 사용하여 루프를 반복하는 방법을 이해하려고합니다. defgh이 끝날 때까지이를 반복 당신이 두 개의 문자열, "abc""defgh", 어떻게 %abc을 통해 루프를 사용할 수있는 경우for 루프에서 modulus 사용하기

는 도달? 즉, abcdefgh 길이의 mod 관계는 무엇입니까?

저는이 개념을 정말로 이해하지 못합니다.

+1

이 숙제입니까? –

+3

정확히 무엇을하려합니까? –

+0

예제를 보여줄 수 있습니까? – Simon

답변

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"의 길이를 나타내고, 상기 루프 인덱스 내측 결과 "알파벳".

+3

그는 C가 아니라 C + +. –

+4

어쨌든 개념이 변경되는 것 같이; 그는 C로 변환하는 방법을 알아낼 수도 있습니다 ... – dcousens

2

일반적으로 mod은 고정 된 범위 내에서 값을 생성하는 데 사용됩니다. 이 경우 "abc" 이외의 위치에 액세스하지 않도록 0에서 strlen("abc")-1 사이의 값을 원하게됩니다.

x % N은 항상 0N-1 사이의 값을 반환한다는 점을 명심해야합니다. 이 특별한 경우에 우리는 또한 x을 1로 늘리면 1이 증가한다는 사실을 이용합니다. x % N도 1 씩 증가합니다.

여기에서 사용하는 모듈러스의 또 다른 중요한 특성은 "롤오버"한다는 사실입니다. x을 1만큼 증가 시키면 x % N이 1 씩 증가합니다. N-1에 도달하면 다음 값은 0이됩니다.

@ 다니엘의 코드를보십시오. 그것은 C++이지만 개념은 언어에 구애받지 않습니다.

관련 문제