读经典之TCPL练习四

“反激电源”是AC/DC隔离电源还是DC/DC隔离电源? 所以在一些场景,我们的输入电压是一个DC,但是我们仍然需要隔离电源的需求,我们就会只采用图9.2的右半部分。在这个场景下“反激电源”是DC/DC。所以此AC/DC的本质是将AC变成高压的DC之后,用带隔离变压器的反激式开关电源产生一个隔离的、稳定的直流电压。一般在讲述各种电源的拓扑的文章和书籍都是在讲述AC/DC的电源拓扑分类的时候,讲述Flyback。反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源,反激式隔离变压器开关电源重点表述的是开关电源包含变压器的拓扑结构。 阅读详情

练习 5-14 修改排序程序,使它能处理-r 标记。该标记表明,以逆序(递减)方式排 序。要保证-r 和-n 能够组合在一起使用。

练习 5-15 增加选项-f,使得排序过程不考虑字母大小写之间的区别。例如,比较 a和 A 时认为它们相等


由于这是一口气做完的所以就贴集成版的

/*
	date:9-5-2014
	author:doodlesomething
	version:1.4

	sort 添加 -r 参数 
	sort 添加 -i 参数
	使用户可以选择降序排列
	使用户可以选择忽略大写进行比较排序
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXLEN 1000
#define MAXLINES 1000
#define MAXBUFPSIZE 10000
#define TRUE 1
#define FALSE 0

char *lineptr[MAXLINES];

int reverse = FALSE;
int ignoreCase = FALSE;


int main(int argc,char *argv[]) {
	int readlines(char *lineptr[],int lim);
	void quicksort( void *lineptr[],int left,int right,int (*comp)(void *,void *) );
	void writelines(char *lineptr[],int nlines);
	int numcmp(const char *s1,const char *s2);
	int other_strcmp(const char *s1,const char *s2);
	int nlines;
	int isnum; //flag
	int c;

	isnum = FALSE;
	/*
	判断所带参数
	(*++argv)[0] 取得是每个参数的第一个字符(第一个参数除外)
	*++argv[0] 表示 ++ argv[0]这个指针 然后*解析取值
	*/
	while(--argc > 0 && (*++argv)[0] == '-') {
		while( c = *++argv[0] ) {
			switch(c) {
				case 'n':
					isnum = TRUE;
					break;
				case 'r':
					reverse = TRUE;
					break;
				case 'i':
					ignoreCase = TRUE;
					break;
				default:
					fprintf(stderr,"invalid parmeter %s\n",*argv);
					return EXIT_FAILURE;
					break;
			}
		}
	}

	if( (nlines = readlines(lineptr,MAXLINES) ) > 1) {
		/*
		(int (*) (void *,void *))  (isnum?numcmp:strcmp )  表示将 numcmp或是strcmp
		强制类型转换为 指针类型 ,该指针指向一个带有两个void型的指针,且该函数返回int的数值
		即最后其是一个指针
		(void**) lineptr 不明白 ---》望指点
		*/
		quicksort( (void**) lineptr,0,nlines-1, (int (*)(void *,void *) ) (isnum ? numcmp:other_strcmp ) );
		writelines(lineptr,nlines);
	}
	else {
		printf("Something wrong");
	}

	return 0;
}
	/*
	将单行收集,并用指针数组的方式存储
	*/
	int readlines(char *lineptr[],int lim) {
		int len;
		char line[MAXLEN];
		char *p;
		int nlines;
		int getLine(char *s,int lim);
		char *alloc(int n);

		nlines=0;

		while( (len = getLine(line,MAXLEN) ) >0 ) {
			if( nlines>lim || (p=alloc(len)) == NULL ) {
				return -1;
			}
			else  {
				line[len-1]='\0';
				strcpy(p,line);
				lineptr[nlines++]=p;
			}
		}

		return nlines;
	}

	/*
	排序:快速排序法
	*/
	void quicksort(void *lineptr[],int left,int right, int (*comp) (void *,void *) ) {

		int i,last;

		void swap(void *v[],int i,int j);

		if(left >= right) 
			return;
		swap(lineptr,left,(left+right)/2 );
		
		last = left;
		//找到last的位置
		for(i = left+1;i <= right;i++ ) {
			if( (*comp)(lineptr[i],lineptr[left]) < 0 ) {
				swap(lineptr,++last,i);
			}
		}

		swap(lineptr,left,last);
		quicksort(lineptr,left,last-1,comp);
		quicksort(lineptr,last+1,right,comp);
	}

	//逆序比较的strcmp函数
	int other_strcmp(const char *s1,const char *s2) {
		const char *p1 = reverse ? s2 : s1;
		const char *p2 = reverse ? s1 : s2;

		return ignoreCase ? strcasecmp(p1,p2): strcmp(p1,p2);
	}
	
	/*
	这里之所以将函数参数声明为const主要是因为 三目运算符要求参数类型一致,
	strcmp原型为 int strcmp(const char *s1,const char *s2) 当然也可增加安全性
	*/
	int numcmp(const char *s1,const char *s2) {
		const char *p1 = reverse ? s2 : s1;
		const char *p2 = reverse ? s1: s2;
		
		double v1,v2;

		v1 = atof(p1);
		v2 = atof(p2);

		if(v1<v2)
			return -1;
		else if(v1>v2)
			return 1;
		else 
			return 0;
	}

	//交换两元素指针,以减少内存开销和元素的移动
	void swap(void *v[],int i,int j) {
		void *tmp;
		tmp=v[i];
		v[i]=v[j];
		v[j]=tmp;
	}

	//获取单行
	int getLine(char *s,int lim) {
		char *tmp;
		int c;

		tmp=s;

		while(--lim > 0 && (c=getchar()) !=EOF && c != '\n') 
			*tmp++ = c;
		if(c == '\n')
			*tmp++ = c;
		*tmp = '\0';

		return (int) (tmp-s);
	}

	void writelines(char *lineptr[],int nlines) {
		printf("\n");

		while( (nlines--) > 0) {
			printf("%s\n",*lineptr++);
		}
	}


	//缓冲区
	static char buf[MAXBUFPSIZE];
	//栈顶指针
	static char *bufp=buf;

	//ask for stack
	char *alloc(int n) {
		if(n > 0 && (buf+MAXBUFPSIZE-bufp) > n ) {
			bufp=bufp+n;
			return bufp-n;
		}
		else {
			return -1;
		}
	}


	/*测试用例

	./sort -i
	abcd
	ABcd
	>>
	abcd
	ABcd
	*/





练习 5-16 增加选项-d(代表目录顺序) 。该选项表明,只对字母、数字和空格进行比 较。要保证该选项可以和-f 组合在一起使用

这个在网上实在不到答案,自己鼓捣了一个晚上才写出来的,集成了前面所扩展的参数


/*
	date:9-5-2014
	author:doodlesomething
	version:1.4

	sort -n 为进行数字转换后排序

	sort 添加 -r 参数 使用户可以选择降序排列
	sort 添加 -i 参数 用户可以选择忽略大写进行比较排序
	sort 添加 -d 参数 用户可以忽略特殊字符进行排序

	-r -i -d 可以组合使用
	-n 仅仅可以和-r组合使用
	-n 与 -i -d 组合使用的不懂,有懂的麻烦指教 doodlesomething@163.com
*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

#define MAXLEN 1000
#define MAXLINES 1000
#define MAXBUFPSIZE 10000
#define TRUE 1
#define FALSE 0

char *lineptr[MAXLINES];

int reverse = FALSE;
int ignoreCase = FALSE;
int isPunct = FALSE;

char *lowerString(char *s);


int main(int argc,char *argv[]) {
	int readlines(char *lineptr[],int lim);
	void quicksort( void *lineptr[],int left,int right,int (*comp)(void *,void *) );
	void writelines(char *lineptr[],int nlines);
	int numcmp(const char *s1,const char *s2);
	int other_strcmp(const char *s1,const char *s2);
	int nlines;
	int isnum; //flag
	int c;

	isnum = FALSE;
	/*
	判断所带参数
	(*++argv)[0] 取得是每个参数的第一个字符(第一个参数除外)
	*++argv[0] 表示 ++ argv[0]这个指针 然后*解析取值
	*/
	while(--argc > 0 && (*++argv)[0] == '-') {
		while( c = *++argv[0] ) {
			switch(c) {
				case 'n':
					isnum = TRUE;
					break;
				case 'r':
					reverse = TRUE;
					break;
				case 'i':
					ignoreCase = TRUE;
					break;
				case 'd':
					isPunct = TRUE;
					break;
				default:
					fprintf(stderr,"invalid parmeter %s\n",*argv);
					return EXIT_FAILURE;
					break;
			}
		}
	}

	if( (nlines = readlines(lineptr,MAXLINES) ) > 1) {
		/*
		(int (*) (void *,void *))  (isnum?numcmp:strcmp )  表示将 numcmp或是strcmp
		强制类型转换为 指针类型 ,该指针指向一个带有两个void型的指针,且该函数返回int的数值
		即最后其是一个指针
		(void**) lineptr 不明白 ---》望指点
		*/
		quicksort( (void**) lineptr,0,nlines-1, (int (*)(void *,void *) ) (isnum ? numcmp:other_strcmp ) );
		writelines(lineptr,nlines);
	}
	else {
		printf("Something wrong");
	}

	return 0;
}
	/*
	将单行收集,并用指针数组的方式存储
	*/
	int readlines(char *lineptr[],int lim) {
		int len;
		char line[MAXLEN];
		char *p;
		int nlines;
		int getLine(char *s,int lim);
		char *alloc(int n);

		nlines=0;

		while( (len = getLine(line,MAXLEN) ) >0 ) {
			if( nlines>lim || (p=alloc(len)) == NULL ) {
				return -1;
			}
			else  {
				line[len-1]='\0';
				strcpy(p,line);
				lineptr[nlines++]=p;
			}
		}

		return nlines;
	}

	/*
	排序:快速排序法
	*/
	void quicksort(void *lineptr[],int left,int right, int (*comp) (void *,void *) ) {

		int i,last;

		void swap(void *v[],int i,int j);

		if(left >= right) 
			return;
		swap(lineptr,left,(left+right)/2 );
		
		last = left;
		//找到last的位置
		for(i = left+1;i <= right;i++ ) {
			if( (*comp)(lineptr[i],lineptr[left]) < 0 ) {
				swap(lineptr,++last,i);
			}
		}

		swap(lineptr,left,last);
		quicksort(lineptr,left,last-1,comp);
		quicksort(lineptr,last+1,right,comp);
	}

	//逆序比较的strcmp函数
	int other_strcmp(const char *s1,const char *s2) {
		int strpunctcmp(const char *str1,const char *str2);

		const char *p1 = reverse ? s2 : s1;
		const char *p2 = reverse ? s1 : s2;

		return isPunct ? strpunctcmp(p1,p2) :  ( ignoreCase ? strcasecmp(p1,p2):strcmp(p1,p2));

	}

	


	
	//忽略特殊字符的字符串比较
	int strpunctcmp(const char *str1,const char *str2) {

		int c1,c2;
		
		while( (c1 = ignoreCase ? tolower(*str1++) : *str1++) && ( c2 = ignoreCase? tolower(*str2++):*str2++) ) {
			if( ispunct(c1) )
				str1++;
			if( ispunct(c2) )
				str2++;

			if( c1 == c2 ){
				str1++;
				str2++;
			}
			else 
				break;
		}

		c1 = ignoreCase ? tolower(*str1) : *str1;
		c2 = ignoreCase ? tolower(*str2) : *str2;

		if( c1 == c2)
			return 0;
		else if( c1 > c2) 
			return 1;
		else if( c1 < c2)
			return -1;
	}

	
	/*
	这里之所以将函数参数声明为const主要是因为 三目运算符要求参数类型一致,
	strcmp原型为 int strcmp(const char *s1,const char *s2) 当然也可增加安全性
	*/
	int numcmp(const char *s1,const char *s2) {

		const char *p1 = reverse ? s2 : s1;
		const char *p2 = reverse ? s1 : s2;

		double v1,v2;

		v1 = atof(p1);
		v2 = atof(p2);

		if(v1<v2)
			return -1;
		else if(v1>v2)
			return 1;
		else 
			return 0;
	}


	//交换两元素指针,以减少内存开销和元素的移动
	void swap(void *v[],int i,int j) {
		void *tmp;
		tmp=v[i];
		v[i]=v[j];
		v[j]=tmp;
	}

	//获取单行
	int getLine(char *s,int lim) {
		char *tmp;
		int c;

		tmp=s;

		while(--lim > 0 && (c=getchar()) !=EOF && c != '\n') 
			*tmp++ = c;
		if(c == '\n')
			*tmp++ = c;
		*tmp = '\0';

		return (int) (tmp-s);
	}

	void writelines(char *lineptr[],int nlines) {
		printf("\n");

		while( (nlines--) > 0) {
			printf("%s\n",*lineptr++);
		}
	}


	//缓冲区
	static char buf[MAXBUFPSIZE];
	//栈顶指针
	static char *bufp=buf;

	//ask for stack
	char *alloc(int n) {
		if(n > 0 && (buf+MAXBUFPSIZE-bufp) > n ) {
			bufp=bufp+n;
			return bufp-n;
		}
		else {
			return -1;
		}
	}


	/*
	测试用例(默认为降序):
	./sort -i
	abcd
	ABcd
	>>
	abcd
	ABcd

	./sort -d
	abcd#g
	abcdg
	>>
	abcd#g
	abcdg

	./sort -id
	abcd#g
	Abcdg
	>>
	abcd#g
	Abcdg

	./sort
	abcd
	Abcd
	>>
	Abcd
	abcd

	./sort 
	abcd#g
	abcdg
	>>
	abcdg
	abcd#g

	./sort -r
	abcd
	Abcd
	>>
	abcd
	Abcd


	*/




什么是DHCP Snooping?如何配置DHCP Snooping? 功能描述防护类型防御伪造 DHCP 服务器、避免地址冲突、增强网络安全性使用场景企业园区网、校园网、大型局域网配合机制IP Source Guard、DAI、防止 ARP 欺骗部署难度⭐⭐(简单)“DHCP Snooping,是内网 DHCP 安全防护的第一道门神。” 🛡️。 阅读详情

相关推荐

CoppeliaSim学习笔记(1):建立Python脚本与CoppeliaSim的连接

CoppeliaSim学习笔记,建立python和CoppeliaSim的连接,实现联调。

qq_22487889的博客 1万+

C //练习 5-14 修改排序程序,使它能处理-r标记。该标记表明,以逆序(递减)方式排序。要保证-r和-n能够组合在一起使用。

【代码】C //练习 5-14 修改排序程序,使它能处理-r标记。该标记表明,以逆序(递减)方式排序。要保证-r和-n能够组合在一起使用。

Made in Code 834

海思Hi3519AV100 sensor移植实战:IMX586驱动调试与硬件验证全流程

本文详细解析了在海思Hi3519AV100平台上移植索尼IMX586传感器的全流程实战。内容涵盖从硬件I2C通信验证、驱动代码移植与修改,到内核配置、时钟设定,以及使用示波器进行硬件信号深度验证和ISP图像调优等关键步骤,为开发者提供了一套清晰、可复现的sensor移植与调试方法。

weixin_29168393的博客 395

C程序设计语言(第2版)----课后练习题5-14、5-15、5-16

练习5-14 修改排序程序,使它能处理-r标记。该标记表明,以逆序(递减)方式排序。要保证-r和-n能够组合在一起使用。 练习5-15 增加选项-f,使得排序过程不考虑字母大小写之间的区别。例如,比较a和A时认为它们相等。 练习5-16 增加选项-d(代表目录顺序)。该选项表明,只对字母、数字和空格进行比较。要保证该选项可以和-f组合使用。 解: #include<stdio.h> #include<string.h> #include<ctype.h> #incl

dream_fun的博客 396

HI3516CV610海思SOC:超高清智慧视觉开发全攻略

本文全面解析海思HI3516CV610 SOC在超高清智慧视觉开发中的应用。该芯片集成双核A7处理器、1Tops NPU、AI ISP及4K视频编码器,专为智能摄像头设计。文章详细介绍了开发环境搭建、核心硬件架构、媒体处理平台(MPP)实战、AI算法集成与系统调优等全流程攻略,帮助开发者高效构建稳定可靠的视觉AI产品。

weixin_29269441的博客 1252

基于STM32F103标准库与DMA的实时音频FFT频谱显示系统设计

本文详细介绍了基于STM32F103芯片与DMA技术实现实时音频FFT频谱显示系统的设计方法。通过标准库驱动和FFT算法处理音频信号,结合OLED显示屏实时绘制音乐频谱,涵盖硬件选型、核心原理、开发环境搭建及性能优化等关键步骤,为数字信号处理应用提供实用参考。

yellow的专栏 775

《C程序设计语言》(《The C Programming Language》)第二版第五章练习题

5-1: 在上面的例子中,如果符号+或-的后面紧跟的不是数字,getint函数将把符号视为数字0的有效表达式。修改该函数,讲这种形式的+或-符号重新写会到输入流中 #include <stdio.h> #include <ctype.h> #define BUFSIZE 100 int buf[BUFSIZE]; int bufp = 0; int getch(voi...

m0_46655998的博客 1462

【汽车故障诊断2】从标准到实战:解码DTC格式背后的诊断逻辑

本文深入解析汽车诊断故障码(DTC)的格式与逻辑,对比了OBD-II标准(如ISO 15031-6)的5字符格式与UDS协议(ISO 14229-1)下更丰富的3字节格式。文章从国际标准出发,结合实战案例,阐述了DTC如何作为汽车电子系统的“体检报告”,帮助工程师和维修技师精准定位故障,并详细解读了UDS 19服务如何读取和管理DTC状态。

berry的博客 711

读《C程序设计语言》2E-3 [4~6]章

2016.02.22 - 04.05读《C程序设计语言》2E-3 [1~3]章1 练习02.22函数与程序结构练习4-1编写函数strrindex(s, t),它返回字符串t在s中最右边出现的位置、如果s中不包含t,则返回-1。[1] 打算 简单打算如下: [2] 实现 简单实现[1]中打算如下:/* p4_1.c * 编写函数strrindex(s, t) - * 它返回字符串t在s中最右边出

记一忘三二 6858

别再乱改grub.cfg了!手把手教你用GRUB2自定义多系统启动菜单(含UEFI/BIOS双模式配置)

本文详细介绍了如何安全、高效地使用GRUB2自定义多系统启动菜单,涵盖UEFI/BIOS双模式配置。通过避免直接编辑grub.cfg文件,采用正确的配置方法和命令,帮助用户打造稳定且美观的启动环境,特别适合Linux多系统用户和开发者。

weixin_42553471的博客 590

Robot Arm 机械臂源码解析

由于我们用的是步进电机,运动的时候是一步一步的,并不是平滑的,这里假设在一个平面上面,一个x步进电机,一个y步进电机。那么放大它们所走的轨迹就会是阶梯状的。而它们也只能沿着网格运动。相当于有了一个最小的分辨率,这个分辨率就是一步。如下图所示,如果x,y电机同时走就能走出45度的斜线。在三维空间里面运动也是如此,你应该可以想象的出来;首先,是updateActualPosition,用来时时更新此时的差补位置,得到的是一个路径与时间t的函数(其中路径的范围为0,1,时间范围为0,dist/v)...

爱吃炸鸡的小猪's blog 1万+

TCPL(The C Programming Language)读书笔记 第七章 输入与输出

<br />1、           标准输入/输出<br />最简单的输入机制是使用getchar函数从标准输入中(一般为键盘)一次读取一个字符:int getchar(void)  getchar函数在每次被调用时返回下一个输入字符。若遇到文件结尾,则返回EOF(值为-1)。<br />getchar 由宏实现:#define getchar() fgetc(stdin)。getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按

遨游 1146

相机图像质量评估标准全解析:MTF、CA、SNR 与色彩偏差的实战理解

图像质量评估是影像系统开发中的核心环节,它直接影响用户视觉体验与终端产品竞争力。本文基于真实的图像调试工程实践,系统讲解主流图像评价指标,包括调制传递函数(MTF)、色差(CA)、信噪比(SNR)与色彩偏差(DeltaE)等关键标准。结合 Imatest 测试流程与实际样张数据,逐项拆解各项指标在实际图像分析中的意义与优化路径,帮助开发者建立完整、量化、工程化的图像质量评估体系。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2805

读经典之TCPL练习三

把某月某日这种日期表示形式转换为某年中第几天 把某年中第几天表示形式转换为某月某日这种日期

doodlesomething 763

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

读经典之TCPL练习五

实现库函数 strncpy、strncat 和 strncmp,它们最多对参数字符串中的前 n 个字符进行操作。例如,函数 strncpy(s, t, n)将 t 中最多前 n 个字符复制到 s 中。

doodlesomething 924

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

TCPL——练习1.9

  打算这段时间重新拜读TCPL这本经典著作,并把后面的习题都做一遍。结果,发现我的决定是多么的正确,多么有必要。   原因在于下午一道练习题,很简单:编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格来表示。   很简单,本来前几章的练习都不打算写,因为之前国庆回家正好带回了一本《The C Answer Book》,就打算写写然后看看答案。不假思索我就写了一个程序: ...

weixin_30919235的博客 142

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

探秘Joyounger's TCPL:一个高效的TCP流量控制库

探秘Joyounger's TCPL:一个高效的TCP流量控制库 项目简介 是由Joyounger开发的一个高性能、低延迟的TCP流量控制库。该项目旨在提供更优秀的网络通信性能,尤其适合实时性要求高的应用环境,如游戏、音频/视频传输和金融交易等领域。 技术分析 优化的TCP算法:TCPL的核心是对标准TCP协议进行了优化,它采用了自适应的拥塞控制算法,能够在保持高吞吐量的同时降低网络延迟,显著...

gitblog_00062的博客 384

看了TCPL后,对C C++书籍的一些想法

看了TCPL后,对C C++书籍的一些想法

rgjtfc的博客 665

TCPL 的学习

         这两天一直在学习TCPL( the c programming language). 现在又开始学c,真的是感觉又回到了原点. 可是有什么办法呢?谁叫自己以前这么浮躁, 总是贪快,总是怀疑, 总想找一条最好的捷径, 最后呢? 一条好好的路, 没有走下去, 另一条路又没找到. 最后干脆就停止了. 等明白过来, 那样是学不来的,时间已经被浪费了好多好多.        今天学

邹创 1152

TCPL读书笔记(1)

今天看了TCPL的第1章,对我来说习题的难度还是比较大,总结下经验 1.C中如果想输出\\ 应该为\\\\ 2.练习1.13想了能有一个小时才搞定………… #include&lt;stdio.h&gt; #define MAX 10//记录单词长度最大为9 #define IN 1 #define OUT 0 int main(void) { int c,i,j; in...

A.I.学习路漫漫 老婆将降大任于斯人也 161

读《TCPL》II

1 导言 《TCPL》(纸质-中文)没有再出新的版本来与C99相匹配,最新的C标准为C11(优快云视C99和C11为同一文件,所以没有上传)。所以摘抄(根据个人情况)的文字都只是遵从C89的。 若有空闲时间,猜其中例子验证和习题将在读完HB后再安装个Linux来练习。练习不限于Cxx且比摘录重要得多。 (1) EOF EOF定义在头文件,是一个整型数。其具体数值是什么并不

记一忘三二 2532

TCPL——练习1.13

  坚持每天写一两道小练习:-)   TCPL练习1.13: 编写一个程序,打印输入中单词长度的水平和垂直直方图。很简单,就是垂直的时候,我用了二维数组,真是浪费空间啊。当然有局限性,只能规定单词长度在什么范围内。TCAB里面通过一条数学运算,没借助二维数组来实现,我没有验证,也没有看懂那运算是怎么得出结果的。 代码 #include <stdio.h>#include ...

weixin_30363817的博客 150

TCPL——练习3.3

  TCPL练习3-3的题目是这样的:函数expand(s1, s2),将字符串中s1中类似a-z的速记扩展为:abcd...xyz,并能处理大小写,并可以处理a-b-c-d, a-z0-9, -a-z这样的情况,前导的-字符照样排印。   我记得这道题在豆瓣上看朋友用PY写得很简洁,用C写的代码看起来比较累赘,可能也是我想得比较复杂。代码: 代码 #include <std...

weixin_30822451的博客 143

TCPL学习笔记

        近来在看Bjarne Stroustrup的TCPL(The C++ Programming Language)中文特别版。看到第6章6.2.5的“增量和减量”的一节,其中举的例子,让人非常深刻地领略到C++的优雅、简洁与高效(从这个例子来看是不是高效,有待验证),下面来看看书中的例子:          运算符 ++ 和 -- 对于在循环里增加或减少变量特别有用。例如,以0结尾的

flinki's zoril 1594

看了TCPL后,对C,C++书籍的一些想法

的确好久没有来写些什么新东西了,的确经常和同学们疯狂喝酒,彻夜狂欢似的K歌,没有那份清醒来完成什么新的东西,但是大整数基本有了个思路,而且最近回头去看了看TCPL,K&amp;D那本,感觉其实自己学C都有3年多了,虽然中间断断续续,个人感觉是同学们中间学的最好的,大一考试笔试只扣了2分,很早的就过了C二级,并且自己很喜欢用C解决一些实际的问题,比如物理实验的数据计算,本来N组数据的计算,同学们都辛...

webcenterol 240

读《TCPL》I

相关笔记:《C和指针》摘录笔记 看电子书是一件非常辛苦的事情。需要长时间的坐在电脑面前,在冬天里还需要牺牲一只手去移动鼠标或者电脑的下滑键(自动翻页只适合小说,看The  C  Programming  language 在某些地方还得停下来)。英文还不是很好and书还是英文的,很多不知道的地方估计都以脑海空白的形式略过了。书还是看纸质的比较好,没那么累,尤其对于一个做一件事情完全没有节

记一忘三二 3236
上一篇: gdb 调试运行设置main函数参数
下一篇: 读经典之TCPL练习三
doodlesomething
博客等级 码龄13年 53粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值