月度归档:2015年02月

C++ primer plus 第7章 7.16程序修复版本

7.16程序修复版本

第五版原书的代码是无法显示如下图的所示的。

|                                                               |
|                                                               |
|                               |                               |
|               |               |               |               |
|       |       |       |       |       |       |       |       |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

代码使用了递归。
经过测试,修复代码如下:

#include <iostream>
const int Len = 66;
const int Divs = 6;

void subdivide(char arr[], int low, int high, int level);

int main(void)
{
	char ruler[Len];

	int i;
	for (i = 1; i < Len - 2; i++)
		ruler[i] = ' ';
	ruler[Len - 1] = '\n';
	ruler[Len] = '\0';
	
	int max = Len - 2;
	int min = 0;

	ruler[min] = ruler[max] = '|';
	std::cout << ruler;

	for (i = 0; i <= Divs; i++) {
		subdivide(ruler, min, max, i);
		std::cout << ruler;
		for (int j = 1; j < Len - 2; j++)
			ruler[j] = ' ';			// reset to blank ruler
	}

	return 0;
}

void subdivide(char arr[], int low, int high, int level)
{
	if (level == 0)
		return;
	int mid = (high + low) / 2;
	arr[mid] = '|';

	subdivide(arr, low, mid, level - 1);
	subdivide(arr, mid, high, level - 1);

	return;
}

合并空格函数

将连续空格转化为一个的空格的n种解法

版本1

#include <stdio.h>

int main(void)
{
	int c;
	int state = 1;

	while ((c = getchar()) != EOF) {
		if (c == ' ') {
			if (state == 1) { 
				putchar(' ');
				state = 0;
			}
		} else {
			putchar(c);
			state = 1;
		}
	}

	return 0;
}

版本2

#include <stdio.h>

int main(void)
{
	int c;
	int state = 1;

	while ((c = getchar()) != EOF) {
		if (c != ' ') {
			state = 1;
			putchar(c);
		} else {
			if (state == 1) {
				putchar(' ');
				state = 0;
			}
		}
	}

	return 0;
}

继续阅读

《明解C》电子书及清单代码和习题代码下载

《明解C》电子书及清单代码和习题代码下载

2015-1-31 学习完毕。说明书中是有错误的,代码请以附件中为参考,所有代码以编译无警告为标准。
/**********************************************************************************
文件目录:mc <明解C>
章节目录:1.1 – 1.13 总共13章
代码文件:类型 示例
清单代码: 0101.c 章节01 第一个清单代码01 (文中以 “代码清单1-1” 表示)
练习代码: 01-01.c 章节01 第一个练习代码01 (文中以 “练习1-1” 表示)
执行文件:0101 linux执行文件,在控制台下使用【#./0101】运行
作者: lnesuper
版本: v1.0
系统: Centos6.5-X64
编译器: GCC 4.4.7
版权: GPL2.0
日期: 2015年1月31日
**********************************************************************************/

百度网盘: http://pan.baidu.com/s/1hqmYWy4