2014-02-14 4 views
0

이 문제를 추적하려고하고 있는데 별이 while 루프를 통과하여 배열에 저장되는 방법을 알 수 없습니다. * 때문에 tolower 8 저장되어 있습니까? 누구든지 첫 번째 ~ ~ 두 번째 루프를 따라 걸어가시기 바랍니다. 영원히 감사 할 것입니다.tolower를 사용하여 배열에 저장하는 방법

#include <stdio.h> 
#include <ctype.h> 

int main() 
{ 
    int index, freq[26], c, stars, maxfreq; 

    for(index=0; index<26; index++) 
     freq[index] = 0; 

    while ((c = getchar()) != '7') 
    { 
     if (isalpha(c)) 
      freq[tolower(c)-'a']++; 

     printf("%d", &freq[7]); 

    } 

    maxfreq = freq [25]; 
    for (index = 24; index >= 0; index--) 
    { 
     if (freq[index] > maxfreq) 
      maxfreq = freq[index]; 
    } 

    printf ("a b c d e f\n"); 

    for (index = 0; index < 5; index++) 
    { 
     for (stars = 0; stars < (maxfreq - freq[index]); stars ++) 
      printf(" "); 

     for (stars = 0; stars < (freq[index]); stars++) 
      printf("*"); 

     printf("%c \n", ('A' + index)); 
     printf(" \n"); 
    } 
    return 0; 
} 
+3

이 코드에서 무엇을 하려는지 자세히 설명해 주실 수 있습니까? – Emu

+0

문제를 일으키는 코드 줄을 보거나 인쇄 한 줄은 무엇입니까? – Narkha

+1

그래서 프로그램을 만들었고 어떻게 작동하는지 모릅니다. –

답변

0

이 코드는 문자에 도달하기 전에 주어진 문자가 콘솔에 입력 된 횟수를 인쇄 종류의 히스토그램 것 같다 '7'.

다음 코드

for(index=0; index<26; index++) 
    freq[index] = 0; 

단순히이 때문에 C에서, 블록 범위에서 선언되는 변수 (즉 내부 사실이다 0 어레이의 모든 값이 설정되어 함수가 아니라 정적 인 변수에는 특정 기본값이 없으므로 변수가 선언되기 전에 해당 메모리에 있던 가비지 만 포함됩니다. 이는 분명히 실행될 때마다 또는 다른 곳에서 실행될 때 표시되는 결과에 영향을 미치므로 확실하지 않습니다.

while ((c = getchar()) != '7') 
{ 
    if (isalpha(c)) 
     freq[tolower(c)-'a']++; 

    printf("%d", &freq[7]); 

} 

이 다음 섹션에 도달 할 때 문자 "7"까지 (이 경우 STDIN에서 입력의 다음 문자를 취득)하여 입력 getchar가()를 수용하여 계속 while 루프를 사용한다. 이것은 "c = getchar()"와 같은 값을 지정하면 "! = '7' '을 사용하여 비교할 수있는 값을 사용할 수 있기 때문입니다. 이렇게하면 STDIN에서 허용 된 문자가 '7'이 될 때까지 루핑을 계속할 수 있습니다. 그 후에 while 루프가 종료됩니다.

루프 자체에서 "isalpha()"를 사용하여 입력 한 값을 확인합니다. 문자가 알파벳 문자 인 경우 true를 반환합니다. "tolower()"를 사용하고 그 값을 'a'의 문자 값에서 뺀 값을 반환함으로써, 우리는 기본적으로 알파벳의 어떤 문자가 숫자인지를 찾습니다. 우리가 'F'라는 문자를 사용했다면 그 예가 될 것입니다. 자본 'F'는 값 70으로 백그라운드에 저장됩니다. tolower()는 대문자인지 확인하고, 대문자이면 소문자 버전 (이 경우 'f'== 102)을 반환합니다. 이 값은 값 6 (알파벳에서 'F'의 위치 인 0부터 세는 값)을 반환하는 'a'(97로 저장 됨)에 의해 뺍니다. 그런 다음 배열의 해당 요소를 대상으로하고이를 늘리면 다른 "F"또는 "f"가 입력되었음을 알 수 있습니다.

maxfreq = freq [25]; 
for (index = 24; index >= 0; index--) 
{ 
    if (freq[index] > maxfreq) 
     maxfreq = freq[index]; 
} 

이 다음 섹션 즉 (발견되는 가장 큰 값으로 최대 주파수의 값을 변경, 최종 값 (횟수 'Z'가 밝혀졌다)을 변수 "최대 주파수"를 설정하고, 아래쪽으로 반복 , 배열에서 발견 된 모든 주어진 문자의 최대 수). 나중에 문자를 올바르게 정렬하고 별과 공백의 수가 올바른지 확인하기 위해 출력을 포맷하는 데 사용됩니다.

관련 문제