computer
文章平均质量分 52
南郭竽
这个作者很懒,什么都没留下…
展开
-
花括号匹配 c实现
花括号的匹配。从逻辑上看,分几种形式:{ { { }}}{ {} {} }{} {} {}以上3种都是匹配的。所以逻辑处理的时候要考虑这些情况。简单说一下判断逻辑。遇到 {的时候,要去看之前有没有 }. 有的话要去消掉前面的匹配记录,并记录这次的;如果之前没有出现过},那就直接统计。没有的话,直接统计。遇到 } 的时候就直接统计。最终比较二者的数量即可。另外如果已经开始统计 } 了,就不能继续统计{了,否则 }{也会被认为是匹配的了。给出一个通用的实现方案:// 通用实现方案,匹配花括号。(原创 2020-12-05 23:34:38 · 382 阅读 · 0 评论 -
c 将任意长度的多行的输入打印到控制台,前面加上行号
如题。发现 c 里面即使是很简单的问题处理起来都是比较麻烦的。比如标题里面的这个小问题。这个问题首先要分析。既然是任意长度,定义固定长度的数组去接收输入就不合适了。malloc 也不行,还是因为不知道大小,不知道 malloc 多大的内存。既然这样,我想到使用 putchar()/ getchar() 这组函数去实现。如果使用这组函数去实现的话,需要注意一个问题,就是所谓的缓冲区问题。什么是缓冲区问题?就是我调用 getchar() 之后,就可以在控制台输入了,但是无论我是输入一个字符还是一行原创 2020-12-01 23:23:03 · 253 阅读 · 0 评论 -
macOS下 vscode 配置 c++ debug
网上看到很多文章,但一直配置不成功。都准备放弃了。然后稀里糊涂的配置成功了。估计没什么帮助,还是简单记录一下。首先我使用 cmake 进行程序编译的。(其实跟这个没关联)我配置成功后发现起作用的就是一个文件.vscode/launch.json.配置成功之后,通过菜单栏上面 Run - Start Debugging 按钮(快捷键F5)开始调试。(先要打断点,并且编译生产目标二进制文件。)插件说明,没有安装code lldb 这个插件,发现不需要。安装了c++ debug默认插件,也就是官方插件原创 2020-12-01 22:03:03 · 500 阅读 · 0 评论 -
BJT 与UTC的转换
北京时间转 UTC#include <stdio.h>/**UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示原创 2017-03-18 00:30:51 · 3122 阅读 · 0 评论 -
如何理解变量赋值(如: int x = 1;)
无论是在OOP语言还是函数式语言中,应该说任何一门编程语言中,都会有对变量赋值的操作。那么,简单来说,该如何理解变量的赋值呢?比如:int x =1;这句赋值操作,定义了一个int型变量x并赋值为1。那这里的x是什么?1又是什么? 从计算机的角度而言,x表示的是一个存储单元地址,而1表示的是该存储单元的内容。如你所知,任何程序和数据都是存储在存储器上面的,而且,无论是对数据而言,还是程序指令而言原创 2017-03-05 12:35:49 · 2641 阅读 · 0 评论 -
何谓"自顶向下",何谓"自底向上"
相信每一个coder都听说过“自顶向下”以及“自底向上”这两个名词。 我也是很早就听说过这两个名词,感觉是”不明觉厉”。 有一天,我打电话给一个做C语言开发的朋友说,我说我一直在做Java,想学一点C,问他有什么好的建议。 他说,他也有类似的想法,他说他一直在做C,想有机会学一点Java.然后他补充一句:他这是自底向上的学习,而我这叫自顶向下的学习。 我当时一愣,不愧是老司机:原来原创 2017-03-05 23:41:31 · 29417 阅读 · 3 评论 -
如何理解 int * p_num = #
在OOP语言中,比如Java是没有指针这个概念的。或者说,在Java中,任何成员变量全部是指针。但是在C语言中,有指针的概念。而且,C必须使用指针,不然很多东西无法表达了。那么,如何理解int * p_num = #呢? int num = 9; int * p_num = #上面这两句代码,就完成了一个指针初始化的操作。但是上面这句话,很容易给人误导。让人困惑到底是给原创 2017-03-19 12:29:57 · 4974 阅读 · 0 评论 -
使用指针访问一维数组
#include <stdio.h>// 使用指针操作数组 -- 遍历int main(void){ int nums[5] = {1,3,5,7,9}; int * p_num; p_num = nums; // or p_num = &nums[0]; printf("ww current array is : "); for(int i=0; i<原创 2017-03-19 14:46:40 · 4214 阅读 · 0 评论 -
使用指针进行一维数组的逆序操作
#include <stdio.h>// 指针操作数组之 -- 一维数组的元素逆序int main(void){ int const LEN = 6; int nums[] = {1,3,9,2,5,7}; int * p_begin = nums; // 特别注意:这里是给 p_begin 赋值,而不是给 *p_begin 赋值! int * p_end = &原创 2017-03-19 15:25:28 · 8364 阅读 · 0 评论 -
一维数组的冒泡排序
#include <stdio.h>//冒泡排序int main(void){ int nums[] = {23,14,76,53,29}; int LEN = sizeof(nums)/ sizeof(int); printf("数组长度获取: %d\n",sizeof(nums)/sizeof(int)); printf("排序前的数组是: "); for原创 2017-03-19 15:52:30 · 4619 阅读 · 0 评论 -
使用malloc为指针分配内存空间
#include <stdio.h>#include <stdlib.h>//使用malloc 自己创建数组空间 --操作一维数组int main(void){ const int N = 6; int * p_nums = /*(int*)*/malloc(N * sizeof(int)); // (int*) 可以不加! // 依然注意这里malloc赋值给了p_nu原创 2017-03-19 21:18:34 · 8682 阅读 · 0 评论 -
malloc & calloc 的区别
malloc与calloc都可以用来申请内存空间,从log上看,两个申请的都是一片连续的空间。只是malloc申请的空间里面的值是不确定,而calloc申请的内存空间会赋初值为默认值。#include <stdio.h>#include <stdlib.h>// malloc & calloc 区别int main(void){ const int LEN = 7; int *原创 2017-03-19 21:42:42 · 496 阅读 · 0 评论 -
c 函数的初使用
#include <stdio.h>#include <math.h>// 计算圆的面积void calcCircle();int main(void){ calcCircle(); return 0;}void calcCircle(){ double radius; double s; printf("input radius: \n");原创 2017-03-19 22:15:18 · 376 阅读 · 0 评论 -
c 返回排序后的一维数组
c 中给数组排序,其实很容易实现,和Java中是类似的。但是C中麻烦的是,如何传递数组参数,如何返回数组。但是,c中数组,完全可以使用指针表示。于是,利用指针来传递数组及返回数组。#include <stdio.h>#include <stdlib.h>// 书写函数 给数组排序,并返回排序后的数组int* sort(int nums[6],int len);int* sort2(int *原创 2017-03-19 23:54:00 · 1067 阅读 · 0 评论 -
c结构体的初使用(学生成绩简单统计)
学生成绩简单统计。 写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。#include <stdio.h>typedef struct{ char原创 2017-03-28 21:41:48 · 2502 阅读 · 0 评论 -
计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
#include <stdio.h>#include <stdlib.h>/*我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。比如: n=2,m=4,则 sum = 15; 1. 找到 前200个素数 2. 从前200个素原创 2017-03-28 21:49:24 · 5180 阅读 · 0 评论 -
windows hexo 环境变量配置
$ cd d:/hexo$ npm install hexo-cli -g$ hexo init blog # --> 找不到 hexo命令怎么办?配置环境变量:E:\Github\hexo\node_modules\.bin当然,你的路径可能和我的不同。但是后面的一定是\hexo\node_modules\.bin然后,重新打开一个命令行就可以执行hexo -v的命令了。原创 2017-03-28 23:38:42 · 5226 阅读 · 1 评论 -
一个很有意思的问题:“ 有1000瓶啤酒,每喝完一瓶得到一个空瓶子,每3个空瓶子又能换1瓶啤酒, 喝掉以后又得到一个空瓶子。问总共能喝多少瓶啤酒?还剩多少空瓶子”
确实想了很久才想出来,解决方案如下:# -*- coding: UTF-8 -*-"""Created on 2017/3/12@author: cat“ 有1000瓶啤酒,每喝完一瓶得到一个空瓶子,每3个空瓶子又能换1瓶啤酒,喝掉以后又得到一个空瓶子。问总共能喝多少瓶啤酒?还剩多少空瓶子”"""def compute(beer_count): drink = 0 # 表示一共原创 2017-03-13 00:28:37 · 4198 阅读 · 1 评论 -
python 小计算
输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]。# -*- coding: UTF-8 -*-"""Created on 2017/4/8@author: cat利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam',原创 2017-04-08 12:31:51 · 980 阅读 · 0 评论 -
c 变量交换函数
#include <stdio.h>// 交换变量int main(void){ int a = 9; int b = 2; printf("a = %d , b = %d\n",a,b); swap(&a,&b); printf("after swap\na = %d , b = %d\n",a,b); return 0;}void swap(int*原创 2017-03-25 14:04:17 · 805 阅读 · 0 评论 -
c 获取数组最大值和最小值
#include <stdio.h>// 获取数组元素的最大值和最小值int main(void){ int arr[] = {1,2,3,5,67,8,9,33}; int min,max; compute_m(arr,sizeof(arr)/sizeof(int),&min,&max); printf("result: min = %d , max = %d \n原创 2017-03-25 14:19:43 · 7562 阅读 · 1 评论 -
c 通过指针表达运算结果
在Java或Python中,如果一个函数/方法,得不到预期结果,我们可以通过抛异常的方式通知调用者,程序并不能得到预期结果。但是在C中,无法通过这种方式告知调用者。一般情况下,我们可以通过返回一个不可能的值告知计算失败。但是,在特殊情况下,比如,任何结果都有可能是预期值,这时候,就无法通过返回值告知调用者函数出异常了。那么,这时候该怎么办?难道C遇到这种情况就无法处理了吗?非也,C有其特殊的方式,原创 2017-03-25 14:44:01 · 519 阅读 · 0 评论 -
python:计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上
根据下列信息计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上? a) 1900.1.1是星期一 b) 1月,3月,5月,7月,8月,10月和12月是31天 c) 4月,6月,9月和11月是30天 d) 2月是28天,在闰年是29天 e) 公元年数能被4整除且又不能被100整除是闰年原创 2017-04-02 02:13:17 · 4137 阅读 · 0 评论 -
C 超级难搞定的 删除字符串中的子串
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。 提示:输入数据的设计使得不可能出现输出为空的情况。#include <stdio.h>#include <string.h>#include <stdlib.h>/** 输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,* 即结果字符串中不能包含S2。* 提示:输入数据的设计原创 2017-03-26 18:00:26 · 6443 阅读 · 0 评论 -
假设你每年初往银行账户中1000元钱,银行的年利率为4.7%。 一年后,你的账户余额为: 1000 * ( 1 + 0.047) = 1047 元 第二年初你又存入1000元,则两年后账户余额为: (
假设你每年初往银行账户中1000元钱,银行的年利率为4.7%。 一年后,你的账户余额为: 1000 * ( 1 + 0.047) = 1047 元 第二年初你又存入1000元,则两年后账户余额为: (1047 + 1000) * ( 1 + 0.047) = 2143.209 元 以此类推,第10年年末,你的账户上有多少余额? 注:结果保留2位小数(四舍五入)。这一题我又是想了很久才找原创 2017-03-16 23:28:06 · 7714 阅读 · 2 评论 -
c 给字符串赋值
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ char* aa = "hello world"; char* bb = (char*)malloc(strlen(aa)+1); char* ta = aa; char* tb = bb; while(*bb+原创 2017-03-26 20:45:38 · 4271 阅读 · 0 评论 -
c 从字符串数组中选择特定的字符串
#include <stdio.h>#include <string.h>#include <stdlib.h>/** 输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,* 即结果字符串中不能包含S2。* 提示:输入数据的设计使得不可能出现输出为空的情况。*/char* slectStr(char** r,char** s,int a,int b);int main原创 2017-03-26 20:59:53 · 2066 阅读 · 0 评论 -
三行代码搞定字符数组与字符指针的区别
都说字符数组是对字符常量的一份拷贝,而字符指针,是指向字符常量的一个地址。那么事实如何呢?#include <stdio.h>#include <stdlib.h>/*三行代码明确字符数组与字符指针的关系。 */int main(void){ char str[] = "Hello world!"; char *pStr = "Hello world!"; prin原创 2017-04-03 16:05:13 · 659 阅读 · 0 评论 -
c:计算合数的质因数,并输出为n=axbxcxd
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。 现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。输出格式:n=axbxcxd#include <stdio.h>#include <stdlib.h>#includ原创 2017-04-03 22:22:49 · 2101 阅读 · 0 评论 -
c:求1-1000 以内的所有完数
一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。 现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。 提示:可以写一个函数来判断某个数是否是完数。 输出格式: 其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。#i原创 2017-04-03 23:44:16 · 4802 阅读 · 0 评论 -
python:将一个外部函数,转化为类中的方法
python作为一门动态语言,在对于oop的实现上,相比Java,就少了很多限制。也多了很多的“随意性”。当然,这种随意性和动态特性,也让python代码在后续的维护变得更加困难。在非必要的情况下,个人不建议这些做法。但是对这些操作,了解一下还是有必要的。 第一,在阅读代码的时候,不会对这种操作感到困惑第二,在特定的场景下,可能需要进行这种操作# -*- coding: UTF-8 -*原创 2017-06-16 22:08:33 · 4421 阅读 · 0 评论 -
python:工厂函数应该全部设置默认参数
python 中的工厂函数,简单理解就是:高阶函数的一种,可以返回函数的函数。一般我们可以写出这样的工厂函数:def func(x): return lambda: x然后验证一下:print(func(2)())# 2输出为2。没错,就是我们期待的结果。然后,再来一个带循环体的(错误的示范!):def multi(x): ret = [] for ele in range原创 2017-06-04 11:12:51 · 885 阅读 · 0 评论 -
python:自定义对象的打印
在python中,如果不重写自定义对象的__str__方法,打印出来的对象是一串类似于<__main__.Bean object at 0x1007da470>的字符串。这当然不是我们想要的结果。于是:通过对__str__方法的重写,就可以返回我们想要的数据的展示。 但是,一个新的问题出现了。以后,如果要修改这个类,那么想要显示想要的对象打印。还得修改__str__方法。 有没有办法原创 2017-06-19 23:49:37 · 14382 阅读 · 3 评论 -
python:对象属性与类属性
python中的继承概念和java中的继承概念是不同。 从我个人角度来理解就是:python中,类也是一个对象;实例可以继承类的属性。而java中,类并不是一个对象,只是一个对象的生成模板。实例的属性完全来自于类中对于属性的定义。 python中类的属性,有点类似于java中的静态变量/静态属性。下面看一个简单的例子:#!/usr/bin/env python# -*- codin原创 2017-06-20 23:38:45 · 3260 阅读 · 0 评论 -
python:抽象超类的实现
在python中,如何去实现一个抽象超类? 看如下代码,实现了一个简单的超类模型。#!/usr/bin/env python# -*- coding: utf-8 -*-# @author : cat# @date : 2017/6/21.class SuperClass: def method(self): print("method in suer class原创 2017-06-21 22:17:49 · 1458 阅读 · 0 评论 -
python:模拟内置函数map的实现
python 的内置函数map可以对一个迭代器/序列中的每个元素进行操作,然后返回一个被操作后的迭代器对象。 * map函数默认是c实现的。map函数非常方便,类似于map的概念在Java8中也有使用到。以及java中的著名开源框架rxjava也有大量使用到这个概念。如何在python中模拟map的实现呢?def mymap(func, *seqs): res = [] # *原创 2017-06-09 22:04:00 · 5288 阅读 · 1 评论 -
python:自定义类中迭代行为的实现
python迭代器-csdn博客Python 中 Iterator和Iterable的区别#!/usr/bin/env python# -*- coding: utf-8 -*-# @author : cat# @date : 2017/6/23.class Squares: """ 单(个活跃的)迭代器的实现 """ def __init__(self,原创 2017-06-23 01:59:26 · 2972 阅读 · 0 评论 -
python:类与oop->装饰器的使用
python中的oop其实与class|type关键字是无关的。相对java而言,python的oop程度更深。但是java的oop更纯粹。python基于装饰器,可以实现AOP,也就是切面编程。 下面看一段简单对代码:#!/usr/bin/env python3# -*- coding: utf-8 -*-# @name : oops.py# @author : cat# @da原创 2017-07-03 00:19:19 · 551 阅读 · 0 评论 -
python:oop范式
就oop来说,必然逃不过两个概念:继承与组合。什么时候使用继承,使用时候组合?在写简单的代码的时候,谁都清楚该怎么区分。但是,一旦业务逻辑复杂,就很难确定当前情况该使用继承还是组合了。相信使用过任意oop语言做过实际项目的人都对此深有体会。就我个人而言,也是经常在业务代码中,很难去判断当前情况该使用哪一种方式。之前我的一位老师说过,代码没有对错,只有好坏。所以,该如何使用,有时候真的只能用一句原创 2017-06-25 17:42:25 · 841 阅读 · 0 评论 -
python:委托->包装对象
python中,有委托的概念。委托,字面理解就是,假装这件事是我在做,但是事实上我委托了其他人来帮我处理这件事。python中的委托,和现实中的委托是何其相似!来看这样一段简单的代码:#!/usr/bin/env python3# -*- coding: utf-8 -*-# @name : warper.py# @author : cat# @date : 2017/6/25原创 2017-06-25 20:25:18 · 3871 阅读 · 0 评论