本次是上练习1-13的补充,为垂直方向的直方图
话不多说 上代码
#include <stdio.h> #include <stdlib.h> #define IN 1 /*定义IN为当前字符在单词内*/ #define
OUT 0 /*定义OUT为当前字符在单词外*/ int main() { int nc, nw, ns, i, j, k;
/*定义nc为一个单词的长度,nw为单词的个数,ns为判定是否当前字符在单词内,i,j,k为辅助变量*/ int max; /*max为最长单词的长度*/
int a[50]; /*定义单词长度数组*/ char b[50][50]; /*定义单词字符数组*/ char c; /*定义输入字符*/ max =
0; /*最长单词长度初始为0*/ i = 1; nc = nw = 0; /*单词长度和单词个数初始为0*/ j = k = 1; ns = OUT;
/*ns初始在单词外*/ while ((c = getchar()) != EOF) /*当输入文件结束符,该循环结束*/ { if ((c >=
'a'&&c <= 'z') || (c <= 'Z'&&c >= 'A')) /*当输入字符是字母时*/ { ++nc; /*单词的长度+1*/
b[j][k] = '*'; /*直方图的表示为星号*/ ++k; /*字符数组列下标+1*/ ns = IN; /*当前字符在单词内*/ } else if
(ns == IN) /*当前字符不是字母但又在单词内*/ { ++nw; /*单词个数+1*/ ++j; /*字符数组行下标+1*/ a[i] = nc;
/*将单词的长度赋值给长度数组*/ if (nc > max) /*寻找最大单词长度*/ max = nc; ++i; /*长度数组下标+1*/ k = 1;
/*将k值回归初始值*/ nc = 0; /*将字符长度回归初始值*/ ns = OUT; /*将ns回归初始值*/ } } for (k = max; k
>= 0; --k) /*打印单词长度垂直直方图*/ { for (j = 1; j <= nw; j++) { if (b[j][k] == '*')
printf("%c ", b[j][k]); else printf(" "); } printf("\n"); } for (i = 1; i <=
nw; ++i) /*打印各单词长度数*/ printf("%d ", a[i]); printf("\n"); system("pause");
return 0; }
热门工具 换一换