2014-02-26 23 views
0

所以在我的代码中能够计算每个单词的长度并根据单词长度增加索引。我希望能够打印垂直直方图。我尝试了几种不同的方法,但似乎无法使其发挥作用。例如,下面显示的代码会显示您看到7个字长度的次数。我可以复制某人已经回答了这个问题的代码,但我真的想知道如何构建初始骨架,并且最重要的是我的数据被填充以构建直方图。我真的很想解释这是如何工作的!这个程序来自C Programming Ritchie和Kernighan。第1.6章练习13.提前感谢您的帮助。如何打印我的直方图困惑?

#include <stdio.h> 

int main() 
{ 
    int c, wc, i; 
    int lenword[10]; 
    wc = 0; 

    for(i=0;i<10;i++) 
    { 
     lenword[i] = 0; 
    } 

    while((c=getchar()) != EOF && wc < 10) //Thanks to ClapTrap point out adding wc<10 
    { 
     if (c == ' ' || c == '\t' || c == '\n') 
     { 
      if (wc > 0) 
      { 
       lenword[wc - 1]++; 
       wc = 0; 
      } 
     } 
     else 
     { 
      wc++; 
     } 
    } 

    for(i=0; i<10; i++) 
    { 
     printf("Length of index = %d is %d\n", i + 1, lenword[i]); 
    } 
} 
+0

您应该尽力而为,以便我们帮助您解决问题。假设上面的代码打印出正确的数据(它看起来似乎合理,虽然我没有编译它,更不用说运行它),那么你需要决定如何扩展你的输出(如果你剖析圣经,还是莎士比亚的全部?),并考虑10是否足够长(肯定有国际化,反沉浸式主义或floccinaucinihilipilification等话语会打破极限)。您应该考虑如何手动绘制图形,然后在代码中重复该操作。 –

+0

@ user2522055你需要垂直脑电图或水平脑图的解释。 – Chandru

+0

我没有得到这个程序的输出? http://shrib.com/kqTO8uuo 看到我给了5个输入字符串,并得到了'i 1的长度为1'的结果。这是什么? –

回答

0

如果可用,我会建议使用gnuplot(GPL许可,因此可以免费使用)。你可以在linux系统上使用它,也可以下载windows版本,尽管我只在linux下使用它。

对于您可以打印两列像

printf("Index\tLength\n"); 
for(i=0; i<10; i++) 
    printf("%d\t%d\n", i + 1, lenword[i]); 

然后运行编译的程序像

./your-program > word-lengths.data 

然后你可以使用嵌入到这样的骨架的bash脚本一个gnuplot的脚本:

#!/bin/bash 

if test $# -lt 1; then 
     echo "Usage:" 
     echo " $(basename $0) list_of_gnuplot_data_files" 
     echo 
     exit 
fi 

while test "x$1" != "x"; do 
     NAME=$(basename ${1%.data}) 
     gnuplot << EOF 
     set title "Diagram title" 

     set key left top 
     set style data lines 
     set grid 

     set autoscale x 
     set xtics nomirror 
     set xlabel "Word lengths" 

     set autoscale y 
     set ytics nomirror 
     set ylabel "Word count" 

     set output "${NAME}.png" 
     set terminal png nocrop enhanced font verdana 12 size 1900,900 
     plot "${NAME}.data" using 1:2 title columnhead axes x1y1 
EOF 
     shift 
done 

所以要使用它,你可以写:

./gnuplot-script word-lengths.data 

它会创建一个word-lengths.png。你也可以使用纯粹的gnuplot脚本,而不需要bash部分,但对我而言,这是迄今为止最方便的方法。