自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 问答 (13)
  • 收藏
  • 关注

原创 100 Days of Code-day37-“解密”

反思:out[0] = ‘\0’;的重要性虽然在第一次将声明转换为文字描述时,这行语句没有意义。因为静态数组在没有认为定义的情况下,会自动将其各元素设置为’\0’但是,当我们进行第二次转换时,第一次的声明还储存在out数组中,这不是我们所需要的。因为strcat函数只会找到该数组中的终止符位置,将字符串常量scr追加到目标字符串dest,将目标字符的终止符覆盖掉,然后在添加一个终止符位。以下为相关结果显示:没有out[0] = '\0’语句添加out[0] = '\0’语句后:..........

2022-06-12 12:06:25 140 1

原创 100 Days of Code-day35-目录排序小助手

本程序设计的思路是将mystrcmp函数的功能并入到插入charcmp函数中,与此同时根据题目扩充了charcmp函数的内容。从如上程序中我们可以看出:其中的这一部分向我们展示了程序将f,r这两种命令都归入到charcmp函数中了。那么深入到charcmp函数中,我们又会发现什么呢?我们发现了其精髓之所在:如果输入了指令d,表明要进行目录排序isalnum函数的作用是检查某个字符是否为一个字母(a-z,A-Z),或者数字(0-9)那么当不是字母、数字、空格、终止符时,就直接将该字符忽略掉,不让

2022-06-11 18:01:26 164

原创 100 Days of Code-day36-灵活排序(集大成于一体)

由于此时传入的字符串s1,s2并不是像之前一样,只包含数字,或者只包含大小写字母。那么根据题目的要求,根据行内的不同字段进行排序,那么如果进行数字排序,那么我们就需要从每个字符串中。抽取出我们想要的那段只含有数字的子字符串(substring),然后对其进行比较。下面是substr函数,主要对其中一个语句做重点解释。该语句执行的是将源字符串s中的部分字符拷贝到是str数组中。相关思路:K&R中的对于substr的声明与该函数的定义不一致。因为在定义中缺少了一个参数。我们下面看看这个参数maxstr的意

2022-06-04 12:10:47 104

原创 100 Days of Code-day34-对于字母的“一视同仁”

借用之前的思路,通过静态字符变量option的二进制位取值来决定该排序程序是否应该不考虑字幕大小写。所以我们此时依旧是通过按位或运算,当我们需要不区分字母大小写时我们将变量option的第二位改为1(二进制位),如下所示。接着就是将命令与对应进行比较操作的函数联系在一起。我所先到的是像之前修改writelines函数一样,对于mystrcmp函数,我们可以增加一个参数。通过该参数的值来判断是否需要忽略字母的大小写。该函数声明如下所示,相较于之前增加了参数capital。但与此同时我们还需要注意一个问题,

2022-06-03 11:34:30 89

原创 100 Days of Code-day33-输出模式切换(顺逆序按位“rn (让你) 双重奏”)

在day32的基础上,我们对其进行修改,使它能够处理-r标记。该标记表明,以逆序(递减)方式排序,不过要保证-r和-n能够组合在一起使用。个人思路:修改1: if (argc > 2 && mystrcmp(argv[1], "-n") == 0 && mystrcmp(argv[2], "-r") == 0) numeric = 1;增加了一个参数-r,所以对于主函数中判断排序模式语句,我对于if语句的条件进行了修改。需要判断捕获到的第三个参数是否为-r

2022-05-30 16:19:12 125 2

原创 100 Days of Code-day32-函数切换模式(字典排序VS数字排序)

通过在排序算法中调用不同的比较和交换函数,便可以实现按照不同的标准排序。通过指向函数的指针来完成。指向不同的函数实现不同的排序方式。#include <stdio.h>#include<string.h>#include<stdlib.h>#define MaxLines 5000char *lineptr[MaxLines];int readlines(char *lineptr[], int nlines);//当指针数组被当做参数传递给函数时,其将退

2022-05-28 17:31:23 96

原创 100 Days of Code-day31-here is detab‘s son

修改程序detab以接受制表位列表作为参数。如果没有参数,请使用默认设置。(detab进阶版)#include<stdio.h>#include<stdlib.h>#define TABINC 8#define MaxLine 100#define YES 1#define NO 0void settab(int argc, char *argv[], char *tab);void detab(char *tab);int tabpos(int pos, ch

2022-05-11 12:45:01 96

原创 100 Days of Code-day30-detab(实现从输入的参数中读取)

编写一个程序 detab,用适当数量的空格替换输入中的制表符,以留出下一个制表位。 假设一组固定的制表位,比如每 n 列。 n 应该是变量还是符号参数?每个n列放置一个制表符停止位,这里把TABINC定义成一个符号参数。#include<stdio.h>#include<stdlib.h>#define TABINC 8#define MaxParameter 100int main(){ char c,*argv[MaxParameter], **temp;

2022-05-09 18:30:46 307

原创 100 Days of Code-day29(逆波兰,your bro is coming)

编写程序 expr,它从命令行计算逆波兰表达式,其中每个运算符或操作数是一个单独的参数。#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#define MaxOp 100#define number '0'#define MaxRawNum 100char getop(char *);

2022-05-06 15:14:44 197

原创 100 Days of Code-day28-查找模式-自主实现strstr函数功能

查找模式的具体功能如上一篇所示。#include<stdio.h>#define MaxSize 100int getline(char *s, int maxlen);const char* mystrstr(const char *str1, const char *str2);int main(int argc, char *argv[]){ int found = 0; char line[MaxSize]; if (argc != 2) pr

2022-04-30 20:25:19 58

原创 100 Days of Code-day27-cmd实现查找模式

在cmd中实现将输入中包含特定模式或字符串的各行打印出来。例如特定字符串为am如果输入的字符串为i am a robot那么就会打印该行。相反,当字符串为i wasn’t a robot就不会打印该字符串。实现程序:#include<stdio.h>#include<string.h>#define MaxSize 100int getline(char *s, int maxlen);int main(int argc,char *a

2022-04-28 11:28:12 189

原创 100 Days of Code-day26(年月日转换的奥秘)

day_of_year:set day of year from month and daymonth_day:set month,day from day of year1.error checking in day_of_year or month_day. Remedy this defect.int day_of_year(int year, int month, int day){ int leap ,i; leap = year % 4 == 0 && year

2022-04-21 20:54:59 148

原创 100 Days of Code-day25-sort simple version

Let us a write a program that will sort a set of text lines in alphabetical order, a stripped down version of unix sort program.#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXLINES 500

2022-04-17 21:29:11 128

原创 100 Days of Code-day24

使用atof函数,将字符串数组转化为浮点型数字(指针版本)atof1和atof2并无较大区别,只不过第二种如果将for循环语句放入if循环语句中,就会导致pow未被初始化,使得最终结果无法得出。而第一种则在一开始就对pow变量进行了初始化,就不会出现这样的问题。#include<ctype.h>//convert string array to floatdouble atof1(char *s){ double f,sign,pow=1.0; for (; isspace(*s

2022-04-07 18:23:22 360

原创 100 Days of Code-day23

K&R exercise 5-1#include <ctype.h>#define Size 9int main(){ int n,array[Size]; int getint(int*); for (n = 0; n < Size && getint(&array[n]); n++)//将第n个元素的地址传入getint函数的形参ip //指针变量ip则存储着第n个元素array[n]的地址。通过其所存储的地址,getint函数就可以

2022-03-20 21:43:01 80 2

原创 100 Days of Code-day22

编写一个递归版本的反转字符串的函数,以将字符串s倒置。反转字符串需要的三个参数:void reverser(char s[], int i, int len)//reverser有3个参数://将被倒置的字符串s//字符串从左端算起的索引i//字符串的长度len传入字符串从左端算起的索引i和字符串的长度len。就可以得出字符串从右端算出的索引。设j是字符串从右端算起的索引。按照字符串由外向内的顺序,字符串中的字符进行位置互换。比如,首先进行位置互换的两个字符分别是s[0],s[len-1]

2022-03-02 11:56:02 173

原创 100 Days of Code-day21

运用递归的设计思想编写一个递归版本的itoa函数。即通过递归调用把整数转换为字符串。在采用递归方法时,我们可以直接按照整数最高位到最低位的顺序,将整数的每一位放入字符串数组中。也就是说不需要再通过反转字符串来得到最终结果。如下图所示,为了先获得最高位,这里通过不断对数字进行取整操作直到结果为0。那么在这个过程中就会出现一个问题,在不断对函数进行递归调用的过程中,我们会不会丢失了局部变量(比如形参)。计算机告诉我们:不会!!!原因:递归调用会使用系统提供的堆栈空间。遇到递归语句时就开始递归调用自身

2022-03-01 16:18:38 67

原创 100 Days of Code-day20

通过递归调用函数printd将一个数作为字符串打印出来。递归调用printd函数的过程:当n小于0时,首先将’-'打印出来,然后将其转化为其相反数。对n进行取整操作,第一次调用printd函数的参数n=123。它将12传递给了printd第二次调用。同理,第二次调用又把1传递给printd的第三次调用。第三次调用printd时,不用再将参数传递给第四次调用了。因为1/10=0。所以此时调用putchar函数,打印数字1。接着返回到第二次调用。同理也将先打印2,然后再返回到第一次调用。打印数字3,

2022-02-27 16:17:35 101

原创 100 Days of Code-day19

K&R中快速排序程序的核心思想:如图所示,将未排序的元素根据一个作为划分基准的“主元”(就是图中的65)分成两个子序列,一个子序列中的元素都小于主元,而另一个的元素均大于主元。然后再次递归,分别对两个子序列中的元素进行排序。归纳起来,就是采用分而治之的方法减小问题的规模,再逐个击破。选主元pivot本程序所选择的主元是在确定线性表的头尾之后(也就是确定left,right这两个指针),处于中间位置的数字。比如初始调用快速排序函数时,传入的参数中的left和right分别为0和7,那么其中间位

2022-02-24 10:53:54 221

原创 100 Days of Code-day18

K&R exercise 4-9Modify getop so that it doesn’t need to use ungetch. Hint: use an internal static variable.反思:the point of illustration of this program is static variable,lastc.It get initialized once and maintain its state in every innovation unles

2022-02-17 21:28:03 275

原创 100 Days of Code-day17

K&R exercise 4-9、4-104-9Our getch and ungetch do not handle a pushed-back EOF correctly. Decide what their properties ought to be if an EOF is pushed back, then implement your design.思考:int类型-1在内存中的表示(16位的系统int占两个字节,而32位机器中它占4个字节,所以int型至少为16位):(1字

2022-02-16 17:53:29 477

原创 100 Days of Code-day16

K&R exercise 4-7、4-84-7Write a routine ungets(s) that will push back an entire string onto the input. Should ungets know about buf and bufp, or should it just use ungetch?初始思路:将字符串的字符按照其输入顺序压入到缓存区中void ungets(char s[]){ int i = 0; void ungetch(

2022-02-16 16:43:33 378

原创 100 Days of Code-day15

K&R exercise 4-5,4-6在day13的基础上增加访问sin、exp与pow等库函数的操作。思路:刚开始的解决方案:对每个math function确立相对应的标志,看起来简单直接。 case'e': push(exp(pop())); break;出现的问题:若每一个math function都有对应的标志,这样容易增加主函数的工作量,因为库函数的数量很多。所以对于所有的库函数来说,是否可以只设置一个标志呢?改进措施:在设置一个标志的情况

2022-02-14 09:58:19 371

原创 100 Days of Code-day14

在day12程序的基础上加入了模运算符(%),并注意考虑负数的情况。//逆波兰计算器#define number '0' //在字符串中找到一个数的标志#define maxop 100 //操作数或运算符的最大长度char push(double);double pop(void);int getop(char []);int main(){ int type; double op2;//操作符option char s[maxop]; while ((type=getop.

2022-02-11 11:10:28 328

原创 100 Days of Code-day13-逆波兰计算器保姆级说明

//逆波兰计算器#define number '0' //在字符串中找到一个数的标志#define maxop 100 //操作数或运算符的最大长度char push(double);double pop(void);int getop(char []);int main(){ int type; double op2;//操作符option char s[maxop]; while ((type=getop(s))!=EOF) { switch (type) {

2022-02-09 11:43:09 284

原创 100 Days of Code-day12

简单计算器程序。在每行中只能读取一个数,并累加求和。//简单计算器,每次只能读取一个数#define MaxLine 1000double atof(char []);int getline(char [], int);int main(){ char line[MaxLine]; double sum; sum = 0.0; while (getline(line, MaxLine) > 0) { printf("%g", sum += atof(line)); }

2022-02-07 22:32:46 285

原创 100 Days of Code-day11

K&R练习4-1编写一个函数,它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1.int strrindex(char s[], char t[]){ int i, j , k; int pos = -1; //明确内外循环:遍历到s数组结尾时若仍无法找到与t匹配的字符串 //那么就表明s中不含t,也说明外层循环的边界条件应该是遍历到s字符串的结尾 for (i = 0; s[i] != '\0'; i++) { //在找到字符串t在s中的匹配后只记录其位置,然

2022-02-07 18:30:42 412

原创 100 Days of Code-day10

实现一个链队列,随意输入一串字符,以@为结束标志,然后将队列中的元素逐一取出,打印在屏幕上#include <stdio.h>typedef struct QNode{ char ch; struct QNode *next;}QNode ,*QueuePtr;typedef struct{ QueuePtr front; QueuePtr rear;//队头指针front和队尾指针rear都指向队列元素,也就是都指向struct QNode类型的数据}LinkQueue;

2022-02-07 17:32:56 254

原创 100 Days of Code-day9

循环队列打印输入内容涉及到的问题#define MaxSize 6 //循环队列的最大容量typedef struct CycleQueue{ int* base; //循环队列的内存分配基地址 int front; int rear;}CycleQueue; //定义循环队列类CycleQueueInitiQueue(CycleQueue* q){ q->base = (int*)malloc(MaxSize * sizeof(int)); if (!q->base) re

2022-01-10 21:05:33 488

原创 100 Days of Code-day8

实现 一个链队列, 任意输入一串字符,以@为结束标志,然后将队列中的元素逐一取出, 打印在屏幕上。在测试函数中发生的错误:十分容易出现的一种情况就是,主函数中使用指针去访问一个空间,而这个空间在被调用函数中已经有指针对其进行操作。这就会导致访问权限的冲突。更加通俗一点就是,一个人住酒店,前台给了他房卡。可是前台不知道系统发生故障,这个房间现在还是有人在住的。所以关于这个房间到底应该谁住这个问题就会发生冲突。因此下面程序的主函数中QueuePtr qp;该定义没有意义。typedef struc

2022-01-06 18:13:35 702

原创 100 Days of Code-day7

THE C programming language练习1-22编写 一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及在指定的列前没有空格或制表符的情况。解题思路:1.如何存放输入的内容 本文采用数组2.抓题目要点。第一个是输入的字符。可以分为‘\t’,’\n’和其他字符。第二个是位置。位置是否超过限制。如果没超过,继续将输入内容存入到数组中。如果超过MAXCOL的话,首先要找到最后一个非空格符之后的

2021-12-30 21:00:38 182

原创 100 Days of Code-day6-C programming language

int main(){ int c,wlen,state,nw; int word[10] = { 0 }; wlen = 1; state = OUT; nw = -1;//解决了Word[0]=0的问题 while ((c=getchar())!=EOF) { if (c == ' ' || c == '\n' || c == '\t') { state = OUT; } else if (state == OUT) { state = IN; nw

2021-12-26 10:26:16 369

原创 100 Days of Code-day5

编写一个程序, 要求:从终端输入一组整数(大于10个数),以0作为结束标志,将这一组整数存放在一个链表中(结束标志0不包括在内),打印出该链表中的值。然后删除该链表中的第5个元素,打印出删除后的结果。最后在内存中释放掉该链表。方法一#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node{ int data

2021-12-25 20:14:12 1000

原创 100 Days of Code-day4

实现的功能:顺序表的查找,插入,删除功能具体描述:向长度为10的顺序表中输入随机数,并打印出来,查找存储整数30的元素在前面的基础上删除表中的第5个元素,并打印删除后的结果#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#define MAXSIZE 10#define MIN 10

2021-12-20 21:38:40 180

原创 100 Days of Code-day3

C progaramming language1-21#define TABINCS 8int main(){ int ns, nt;//ns,nt分别表示必要时打印空格和制表符的个数 char c; int pos = 1;//记录程序在文本行中的位置 ns = 0; nt = 0; while ((c = getchar()) != EOF) { pos++;//每输入一个字符记录一次位置 //根据本题的要求,主要分为空格符和非空格符 if (c == ' ')//空格符

2021-12-17 21:23:21 356

原创 100 Days of Code-day2

LeetCode题目(整数反转):给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-integer著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。图片来源:https://leetcode

2021-12-11 20:49:54 76

原创 数据结构与算法-100 Days of learning-day5

用Kruskal算法构建最小生成树1)算法描述(将森林合并成树)对于一个无向连通图G,设其最小生成树为T。最小生成树在初始状态下是由|V|个顶点构成,而且各顶点之间无任何边(每个顶点都是一棵树,所以说初始状态就是一片森林)。此时T中的每个顶点都是一个只有一个顶点的连通分量。那么,将森林合并成树用到的就是贪心算法中的Kruskal算法。它每次只选取权重最小的边,然后将其收录进去,同时在这个过程中要一直满足不能生成回路。那么什么时候会出现回路?当待选取边相关联的两个顶点属于同一个连通分量时,选取该边就会出

2021-12-08 21:18:22 280

原创 数据结构与算法-100 Days of learning-day4(渴望批评指正)

1.什么是最小生成树树是一种特殊的图。在了解构造最小生成树之前,首先要弄清楚最小生成树的概念。如图所示,分别从“树”,“生成”,“最小”这三个字眼出发,来分析概念。上图右侧给出了四个顶点之间的完全图,其余都是该完全图的生成树,可见生成树是不唯一的。它需要满足|V|个顶点只有|V|-1条边,且无回路出现(因为生成的结构是树)。通过如上分析,我们可以看出存在最小生成树是图连通的充分必要条件。2.用Prim算法构建最小生成树在了解了最小生成树的概念之后,开始介绍用Prim算法来构成最小生成树。谈到该算

2021-12-02 21:33:59 178

原创 100days of code-day01(欢迎批评指正)

int main02()//实现输入复制到输出,并将输入中的连续空格替换为一个空格{ int c,ns; ns = 0; while ((c=getchar())!=EOF) { if (c==' ') { ns++; if (ns == 1) { putchar(c); } else { ns--; } } else { putchar(c); ns = 0;//(happened problem:在一次输

2021-11-30 17:19:04 222

原创 数据结构与算法-100 days of learning-day3(欢迎批评指正)

方法1:直接将单源最短路算法调用|V|遍,对于稀疏图来说效果更好,时间复杂度T=O( (|V| ^3)log|V| )。对于稠密图来说,该算法效率较低,时间复杂度为T = O( |V|^3 + |E||V|)。方法2:Floyd算法具体描述:不管是有权图还是无权图,其初始矩阵均为邻接矩阵(一个图可以通过邻接矩阵来表示)。对于无权图来说,其邻接矩阵为对称矩阵。所以显然最终得到的每对顶点之间的最短路径和最短距离均为二维数组。这里用二维数组D来表示从顶点Vi到Vj的最短距离(D[i][j]),二维数组pa

2021-11-29 20:00:39 123

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除