1
回答
用C语言编写单词长度的垂直直方图---C程序设计语言习题1-13
终于搞明白,存储TCO原来是这样算的>>>   

准备重新学习《C程序设计语言》,习题1-13中单词的垂直显示不懂得如何编写。我把数据存于二维数组中了,刚开始的代码如下:

#include <stdio.h>

main()
{
	int c;
	int nSpace = 0;		//用于处理多空格,制表符情况
	int nCount = 0;		//用于处理:用*表示单词长度
	int nl = 0;			//用于判断显示是否换行

	char nArray[10][20];
	int i = 0;
	int j = 0;
	int m = 0; 
	int n = 0;
	int k = 0;
	for (i = 0; i < 10; i++){
		for (j = 0; j < 20; j++){
			nArray[i][j] = '-';
		}
	}

	i = j = 0;
	while ((c = getchar()) != EOF){
		if ((' ' != c) && ('\t' != c) && ('\n' != c)){
			nSpace = 0;
			if ((j > 18) || (i > 9)){
				break;
			}
			nArray[i][j++] = c;
		}
		else{
			if (nSpace)
				continue;
			nSpace = 1;
			nCount = j + 1;
			while (--nCount){
				nArray[i][j++] = '*';
			}
			i++;
			j = 0;
		}
	}

	//以下代码用于显示垂直直方图,但是有误
	for (j = 19; j >= 0; j--){
		for (i = 0; i < 10; i++){
			if ('-' == nArray[i][j]){
				continue;
			}
			else if ('*' == nArray[i][j]){
				printf("*         ");		//10个空格
			}
			else{
				nl = 1;
			}
		}
		if (nl){
			nl = 0;
			for (n = 0; n < 20; n++){
				if ((nArray[m][n] == '*') || (nArray[m][n] == '-')){
					if (n < 10){
						printf(" ");
						continue;
					}
					else{
						break;
					}
				}
				printf("%c", nArray[m][n]);
			}
			m++;
			continue;
		}
		printf("\n");
	}
}
nArray数组里面包含着我要显示的数据,比如:

其中hello*****为第一个数据,world*****为第二个数据,而“-”用于填充空格。但是就是无法正常显示好的直方图,类似这样的:

当然,这里长度都大于5才正确的。

如何显示这个二维数组呢???

<无标签>
举报
fzyz_sb
发帖于4年前 1回/363阅
顶部