2013-06-03 3 views
2

이 프로그램을 읽었지만 이해할 수는 없습니다. length[] arraay에서 정확히 무슨 일이 일어나는지 설명하십시오. 코드에서C의 문자 빈도 막대 그래프

#include <stdio.h> 
#define EOL '\n' 
#define ARYLEN 256 
main() 
{ 
    int c, i, x; 
    int length[ARYLEN]; 
    for(x = 0; x < ARYLEN;x++) 
     length[x] = 0; 
    while((c = getchar()) != EOL) 
    { 
     length[c]++; 
    if (c == EOL) 
     break; 
    }  
    for(x = 0; x < ARYLEN; x++) 
    { 
     if(length[x] > 0){ 
      printf("%c | ", x); 
      for(i = 1; i <= length[x]; ++i){ 
       printf("*"); 
     } 
     printf("\n"); 
     } 
    } 
} 

답변

1

정수 배열 length[] 문자를 저장하는 데 사용되지 않습니다 그것은 즉 두 자리 문자의 다른 유형을 저장하는 데 사용할 수있는 방법 & chars.Following는 코드입니다. 이것은 입력되는 각 문자의 수를 저장하는 데에만 사용됩니다. 문자는 문자 변수 cwhile((c = getchar()) != EOL)에 하나씩 읽혀집니다.

하지만 까다로운 부분은 length[c]++;입니다. 각 문자의 수는 배열 length[]에있는 ASCII value - 1과 동일한 위치에 보관됩니다. 65A 대한 ASCII 코드이므로

ASCII 코드를 사용하는 시스템의 예를 들면, length[64]A의 카운트를 포함한다. 66BASCII-8 코드이기 때문에

length[65]B의 수를 포함합니다. 97aASCII 코드이기 때문에

length[96]a의 수를 포함합니다. 480ASCII 코드이기 때문에

length[47]0의 수를 포함합니다.

+0

ASCII는 127 (십진수)로 끝납니다. 어떤 문자 코드가 사용되는지는 알지 못하며 알 필요도 없습니다. –

2

배열에는 (적어도 개념적으로) 문자는 저장되지 않습니다. 인덱스 번호 c의 배열 위치에 숫자 값이 c 인 문자가 프로그램에 발생한 횟수를 저장합니다.

는 기본적으로 C 프로그래밍 언어에서는, char는 8 비트로 구성되며 signed char 127에 unsigned char 또는 -128에서 255까지의 범위는 0의 값을 보유 할 수있는 데이터 유형이다.
그런 다음 프로그램은 char을 사용하여 표현할 수있는 많은 다른 값을 보유 할 수있을만큼 큰 배열을 정의합니다. 각 고유 값에 대해 하나의 배열 위치입니다. 그런 다음 해당 배열의 위치 인 length[c]을 사용하여 해당 특정 값에 대한 카운터로 발생 횟수를 계산합니다. 데이터를 출력하기 위해 배열을 반복 할 때 루프 내부의 현재 색인을 보면서 데이터가 속한 문자를 알 수 있으므로 은 문자이고 length[x]은 우리가 처리 한 데이터입니다.

관련 문제