2016-12-02 7 views
-5

아래에 작성된 프로그램이 있습니다. 난 그게 어떻게 문자 배열을 반대 이해하지 오전. 내 말은 그것이 잘 작동 의미, 사용자에 의해 char 배열에 저장된 문자열을 반전 않습니다,하지만 어떻게 작동합니까 및 순서를 역방향 않습니다 알고 싶어요? 기본적으로 나는 첫 번째 for 루프를 이해하지 못하고 있으며, 본문에는 아무런 진술도없고 for 루프의 첫 번째 부분도 빠져있다. 일반적이거나 어려운 단어가 아닌 간단하고 쉬운 단어로 설명하십시오. 나는 영어 원어민이 아니다. 고마워.누군가이 프로그램을 나에게 설명해 주시겠습니까?

#include <iostream> 
using namespace std; 

int main() 
{ 
    char name[99]; 
    int counter=0; 

    cin >> name; 

    for(;name[counter]!='\0'; counter++) 
    {} 

    cout << "\nName: "; 

    for (;counter > 0; counter--) 
    { 
     cout << name[counter-1]; 
    } 
} 
+1

첫 번째 루프 : [C 스타일 문자열은 null로 끝납니다.] (https://en.wikipedia.org/wiki/Null-terminated_string) 루프 이후에 카운터의 값은 어떻게됩니까? – user4581301

+0

카운터의 값은'char' 배열의 원소의 값과 같습니다. –

+2

정말 참신한 아이디어입니다.디버거를 시작하고 코드를 단계별로 실행하여 정확하게 수행하십시오. 코드를 읽는 법과 그 의미를 배우는 것뿐만 아니라 디버거 사용과 문제 해결에 대한 실용적인 기술뿐만 아니라 튜토리얼을 줄 사람이 없을 때해야 할 일을 연습합니다. –

답변

0

C 문자열은 null ('\ 0')으로 끝납니다. 첫 번째 루프는 name에 포함 된 문자열의 끝이 발견 될 때까지 counter을 증가시킵니다. 그것은 null 문자로 표시됩니다. 중요한 부분은 counter이 첫 번째 for 루프 외부에서 선언되고 두 번째 루프가 실행될 때 동일한 값으로 범위에 남아 있다는 것입니다. 두 번째 루프는 문자의 끝에서 name으로 시작하여 첫 번째 문자를 인쇄 할 때까지 문자를 인쇄합니다. 그것은 당신의 카운터가 당신으로 입력 한 내용의 문자 수에 증가했다이 점 .At '\ 0'에 도달 할 때까지

+0

설명해 주셔서 감사합니다. 그러나 여전히 질문이 있습니다. 1. 첫 번째 for 루프에'counter '대신 비교 부분에'name [counter]'배열이 포함되어있는 이유는 무엇입니까? 2. array의 첫 번째 요소가 0 번째 인덱스에 있기 때문에 두 번째 루프에 '='기호와 함께 '>'기호가 포함되지 않는 이유는 무엇입니까? 따라서 루프에 ' = 기호? –

+1

@KhubaibKhawar Answers. 1.이 코드는'name'에 널 터미네이터 ('\ 0')를 찾습니다. 그래서'name [counter]'를 체크해야합니다. 2.'name '에 대한 색인 생성이'counter - 1'이기 때문에'>'가 사용됩니다. 'counter '가 0 일 때 실행 된 루프가'name [-1]'이 출력되고 그것은 배열의 범위를 벗어납니다. –

+0

@KhubaibKhawar'name'의 길이를 알지 못하기 때문에 문자열의 끝을 표시하는'\ 0'을 찾을 때까지 반복합니다. 당연히이 동일한 코드는 미리 길이를 알 수있는 무한한 다른 방법으로 작성되었을 수 있습니다. – Havenard

-1

당신이 루프 0

for(;name[counter]!='\0'; counter++){} 

상기 사용자의 카운터 시작 위의 카운터를 증가 이름. 예를 들면 : 당신은 안녕 카운터를 입력 한 경우 다음 역으로 배열의 각 문자를 인쇄 5에서 카운터 값을 갖는 것으로 시작, 5

루프 위에서

for (;counter > 0; counter--){cout << name[counter-1]; }

에서 지금 때문에 첫 번째 반복 당신을 카운터가 5이면 이름 [4]를 출력하고 카운터가 감소하므로 이름 [3] = l을 인쇄 한 다음 이름 [2] = l, , 이름 [1] = e, 이름 [0] = h . 참고 : 카운터가 값 n 인 경우 n-1을 인쇄합니다. 따라서 카운터가 1로 감소하면 name [0]이 인쇄됩니다. 카운터는 결국 루프가 거짓이 될 때까지 0으로 감소합니다. 또한 배열 요소 자체를 뒤집지 않고 역순으로 인쇄합니다.

-1

프로그램에서 첫 번째 For 루프는 name 변수의 문자 수를 확인합니다. 어떻게 작동하는지 설명하겠습니다. 루프 용

같은 기본 구조를 갖는 (ⅰ = 10, I> 0; 난 -)
우선 파트 I = 0으로 초기화 번째 부분
{
들면
// 부위} 조건이고 세 번째 부분은 증가/감소입니다.
프로그램에서 카운터의 값을 0으로 초기화했습니다.
이 루프는 문자 수를 계산하기위한 것으로 각 루프 카운트 변수가 증가 할 때 사용합니다. 우리는 신체 일부에 아무것도 쓰지 않아도됩니다.

루프 카운트 변수를 처음 완료 한 후 은 name 변수의 문자와 동일한 값을 갖습니다.
다시 두 번째 루프에서는 count에 이미 값이 저장되어 있기 때문에 카운트 값을 초기화 할 필요가 없습니다.

희망 당신은 지금 이해하고 .. !!

-1
#include <iostream> 
using namespace std; 

int main() 
{ 
    char name[99]; 
    int counter=0; // variable to store the number of characters in name. 

    cin >> name; 

    // the for loop is counting each letter until the end of the string, storing the result in counter. 
    for(;name[counter]!='\0'; counter++) 
    {} 

    cout << "\nName: "; 

    // if the name you entered was "Billy" counter would = 5 
    for (;counter > 0; counter--) 
    { 
     // since counter = 5 counter subtracts 1 to get to the "5th" spot in the array which is when counter = 4 
     // name[0] = B 
     // name[1] = i 
     // name[2] = l 
     // name[3] = l 
     // name[4] = y 
     // now starting from position 4 in the array counter-- subtracts 1 
     // from counter each time it runs through the loop to get to each previous letter. 
     cout << name[counter-1]; 
    } 
}