2013-09-21 1 views
2

을 C는 - 인쇄 - 그 input.It 단어의 길이의 막대 그래프를 인쇄하는 프로그램을 작성이 K & R에서 질문입니다 히스토그램

은 수평 막대가있는 막대 그래프를 그릴 간단합니다; 그러나 수직 방향은보다 어렵습니다.

자습서 소개이기 때문에 라이브러리 함수를 사용하지 않아도됩니다!

나는 그렇게 할 수있는 다음과 같은 프로그램을 작성했습니다하지만 몇 가지 버그를 가지고있다 - 단어 사이에 하나 이상의 공백 문자가

1) 경우 예상대로 프로그램이 작동하지 않습니다.

2) 'k'의 최대 값을 어떻게 알 수 있습니까? 입력에 단어가 몇 개 있는지 알 수있는 방법은 무엇입니까? 여기

코드입니다 : -

#include<stdio.h> 
#include<ctype.h> 
#include<string.h> 
#include<stdlib.h> 
#define MAX_WORDS 100 

int main(void) 
{ 
    int c, i=0, k=1, ch[MAX_WORDS] = {0}; 

    printf("enter the words:-\n"); 

    do 
    { 
     while((c=getchar())!=EOF) 
     { 
      if(c=='\n' || c==' ' || c=='\t') 
       break; 
      else 
       ch[i]++; 
     } 
     i++; 
    } 
    while(i<MAX_WORDS); 

    do 
    { 
     printf("%3d|",k); 
     for(int j=1;j<=ch[k];j++) 
      printf("%c",'*'); 
     printf("\n"); 
     k++; 
    } 
    while(k<10); 
} 

답변

2

이 프로그램은 당신에게 단어의 수를 줄 것이다 두 단어 사이 numWords에 하나 개 이상의 줄 바꿈 문자가있는 경우에도 잘 작동합니다.

#include <stdio.h> 
#include <stdbool.h> 

int main(void) 
{ 
    int ch, cha[100] = {0}, k = 1; 
    int numWords = 0; 
    int numLetters = 0; 
    bool prevWasANewline = true;  //Newlines at beginning are ignored 

    printf("Enter the words:-\n"); 
    while ((ch = getchar()) != EOF && ch != '\n') 
    { 
     if (ch == ' ' || ch == '\t') 
      prevWasANewline = true; //Newlines at the end are ignored 
     else 
     { 
      if (prevWasANewline)  //Extra nelines between two words ignored 
      { 
        numWords++; 
        numLetters = 0; 
      } 
      prevWasANewline = false; 
      cha[numWords] = ++numLetters; 
     } 

    } 

    do 
    { 
     printf("%3d|",k); 
     for(int j=0;j<cha[k];j++) 
      printf("%c",'*'); 
     printf("\n"); 
     k++; 
    } while(k <= numWords); 

    return 0; 
}  
+2

도대체 누가 이것을 떨어 뜨렸습니까? 적어도 그/그녀는 코멘트를 남겨 두어야했다. – haccks

+1

+1 그냥 downvote 카운터. 매력처럼 작동합니다. – syb0rg

+0

프로그램이 맞지만 프로그램이 K & R 처형 요건을 충족시키지 못한다고 생각합니다. 길이의 빈도를 세는 것으로 가정합니다. 따라서 'a a a a'와 같은 5 개의 단어가있는 경우 1 : 5로 돌아가거나 'ab abc'와 같은 단어가 3 개있는 경우 1 : 1 2 : 1 3 : 1로 돌아옵니다. 따라서 길이 : 주파수. – runners3431

관련 문제