阿基米东
本科毕业于国内某知名双非理工大学,当过校队球员,后自学编程,专注于嵌入式软件开发十余年,在物联网、机器人、汽车等领域拥有实战经验,也是多个开源项目的贡献者,对 Web 前后端、AI 技术略知一二。立志成为一名杰出的开源创客,让世界因我而变得更美好!
展开
-
计算字符串 s 构成的最长回文串长度
定义为 128(也就是 ASCII 码的范围),因此占用内存较多。而实际用到的只有 52 个,即 A-Z 和 a-z,因此可进一步优化。不过,由于 ASCII 码表中大小写字母中还有 6 个字符,故定义大小为 58 比较合适。另外,字符串的大小限定在 2000,因此可以用更小的数据类型。给定一个包含大写字母和小写字母的字符串 s,返回通过这些字母构成的最长的回文串。在构造过程中,请注意区分大小写。不能当做一个回文字符串。原创 2023-03-21 21:36:08 · 302 阅读 · 0 评论 -
请简述网络协议中,大小端和字节对齐的作用
在嵌入式开发中,我们经常需要处理各种网络协议,比如我们自定义一套下位机(Sensor)和上位机的通信协议,它们可能通过以太网、串口(UART)、SPI、I2C 等总线进行传输,实现多端通信。在 C/C++ 编程中,通常会使用 struct 结构体或者 class 类来定义协议格式。举个例子,假设我们的协议需要传输 Sensor 采集的数据到上位机进行显示,那么我们会将数据塞到 Packet 数据包中,为了增加数据包的可解释性和安全性,我们通常还会为其增加数据包头(Header)和包尾(Tail)。现在,假设原创 2022-06-18 14:43:02 · 966 阅读 · 0 评论 -
已初始化和未初始化的局部变量和全局变量在内存中如何分布?
在 C 语言中,通常可以把内存理解为四个分区:栈、堆、全局/静态存储区和常量存储区。栈(stack,也称“堆栈”)通常是用于存储在编译期间就能确定存储大小的变量,用于在函数作用域内创建,在离开作用域后自动销毁的变量的存储区。通常是局部变量、函数参数等的存储区。它的存储空间是连续的,两个紧密挨着定义的局部变量,它们的存储空间也是紧挨着的。栈的大小是有限的,在 Linux 中可以通过命令 ulimit -s 查看默认栈空间大小,默认情况下为 8192 KB(即 8MB)。因此如果在程序内部分配超大的数据原创 2020-12-31 01:00:22 · 4196 阅读 · 0 评论 -
【C语言】assert() 断言的作用
assert 是宏,而不是函数。它的原型定义在头文件 assert.h 中:void assert( int expression );宏 assert 经常用于在函数开始处检验传入参数的合法性,可以将其看作是异常处理的一种高级形式。assert 的作用是 先计算表达式 expression,然后判断:如果表达式值为假,那么它先向 stderr 打印错误信息,然后通过调用 abort 来终止程序运行。如果表达式值为真,继续运行后面的程序。注意:assert 只在 DEBUG 下生效,在调试结原创 2020-12-31 00:12:12 · 8919 阅读 · 0 评论 -
static 和 extern 的作用
问题:static 和 extern 修饰变量和函数时有什么作用?请举例说明。static简单来说,static 关键字有两个作用:限制变量的作用域设置变量的存储域具体来说,在不同的使用场景有不同的表现。(函数名也是变量)静态全局变量用 static 声明静态全局变量:限制本文件外使用static int a;定义全局变量时加一个 static 声明,该变量只限于被本文件引用,而不能被其他文件引用。静态全局变量和全局变量一样存放在静态区。静态局部变量使用 static 修饰局部原创 2020-12-30 23:46:11 · 1403 阅读 · 0 评论 -
【经典面试题】strlen 函数的实现
分析strlen 是 C 库函数,它的作用是计算字符串的长度。函数 strlen 的原型是:size_t strlen(const char *str);strlen 函数从字符串的开头位置依次向后计数,直到遇见 \0,然后返回计时器的值。最终统计的字符串长度不包括 \0。实现int strlen(const char* str){ assert(str != NULL); int len = 0; while((*str++) != '\0') ++len; return le原创 2020-12-30 22:27:01 · 692 阅读 · 0 评论 -
【经典面试题】strcpy 函数的实现
分析strcpy 是 C 库函数,它的作用是将一个字符串复制到另一个地址空间。函数 strcpy 的原型是:char* strcpy(char* des , const char* src);调用 strcpy 函数,将 src 所指向的字符串复制到 dest 所指向的地址空间,同时返回复制后的字符串。注意:des 和 src 所指内存区域不可以重叠,且 des 必须有足够的空间来容纳 src 的字符串,否则会造成缓冲溢出(buffer overflow)错误。实现#include <原创 2020-12-30 22:17:32 · 1191 阅读 · 0 评论 -
【经典面试题】strcmp 函数的实现
分析strcmp 是 C 库函数,strcmp 是 string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。函数 strcmp 的原型是:int strcmp(const char *s1,const char *s2)返回值:若 s1==s2,返回零;若 s1>s2,返回正数;若 s1<s2,返回负数。因此 strcmp 需要做的就是将两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 \0 为止。原创 2020-12-30 21:53:15 · 1678 阅读 · 0 评论 -
【经典面试题】strcat 函数的实现
分析strcat 是 C 库函数,它的作用是连接两个字符串。函数 strcat 的原型是:char* strcat(char* des, char* src);调用 strcat 函数,将 src 所指向的字符串追加到 dest 所指向的字符串的结尾,同时返回连接后的字符串。注意:des 和 src 所指内存区域不可以重叠,且 des 必须有足够的空间来容纳 src 的字符串。实现#include <assert.h>#include <stdio.h>char原创 2020-12-30 21:46:30 · 1099 阅读 · 0 评论 -
编程练习——求最小公倍数
求最小公倍数时间限制:1秒空间限制:32768K描述正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。输入:两个正整数 A 和 B。输出:A 和 B 的最小公倍数。例如,输入 5 7,输出 35。分析我们知道,两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积。如果 [a, b] 表示 a...原创 2019-10-28 17:10:26 · 2349 阅读 · 0 评论 -
编程练习——地下迷宫
地下迷宫时间限制:1秒空间限制:32768K描述小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值 P 跳出这个地下迷宫。为了让问题简单,假设这是一个 n*m 的格子迷宫,迷宫每个位置为 0 或者 1,0 代表这个位置有障碍物,小青蛙达到不了这个位置;1 代表小青蛙可以达到的位置。小青蛙初始在 (0,0) 位置,地下迷宫的出口在 (0,m-1)(保证这两个位置都是 1,...原创 2019-10-18 17:56:11 · 528 阅读 · 1 评论 -
编程练习——字符串反转
字符串反转时间限制:1秒空间限制:32768K描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。输入 N 个字符输出该字符串反转后的字符串示例:输入 abcd,输出 dcbaC 代码实现#include <stdio.h>#include <string.h>int main(void){ char str[128]; ...原创 2019-10-17 09:17:14 · 1355 阅读 · 0 评论 -
编程练习——完全数计算
完全数计算时间限制:1秒空间限制:32768K描述完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。给定函数 count(int n),用于计算 n 以内 (含n) ...原创 2019-10-16 11:11:59 · 951 阅读 · 0 评论 -
编程练习——杨辉三角
输出杨辉三角形时间限制:1秒空间限制:32768K描述输入 n 值,使用递归函数,求杨辉三角形中各个位置上的值。输入描述:一个大于等于 2 的整型数 n。输出描述:题目可能有多组不同的测试数据,对于每组输入数据,按题目的要求输出相应输入 n 的杨辉三角形。例如,输入 6,输出:1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1...原创 2019-10-15 11:21:05 · 1060 阅读 · 0 评论 -
编程练习——杨辉三角的变形
时间限制:1秒空间限制:32768K描述 1 1 1 1 1 2 3 2 1 1 3 6 7 6 3 11 4 10 16 19 16 10 4 1以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数,左上角数到右上角的数,3 个数之和(如果不存在某个数,认为该...原创 2019-10-14 17:59:43 · 542 阅读 · 0 评论 -
编程练习——公共字串计算
描述计算两个字符串的最大公共字串的长度,字符不区分大小写。时间限制:C/C++ 1秒,其他语言 2秒空间限制:C/C++ 32768K,其他语言 65536K接口说明原型:int getCommonStrLength(char* pFirstStr, char* pSecondStr);输入参数:pFirstStr:第一个字符串pSecondStr:第二个字符串C代码...原创 2019-10-12 13:37:55 · 263 阅读 · 0 评论 -
算法介绍——快速排序
快速排序快速排序是最常用的排序算法。举例说明假设我们要对 “6 1 2 7 9 3 4 5 10 8” 这 10 个数进行排序。C代码实现#复杂度分析原创 2019-10-11 00:17:33 · 48695 阅读 · 0 评论 -
算法介绍——冒泡排序
冒泡排序冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。举例说明假如我们需要将 12 35 99 18 76 这 5 个数进行从大到小的排序。我们可以这么做:首先比较第 1 位和第 2 位的大小,现在第 1 位是 12,第 2 位是 35。发现 12 比 35 要小,因为我们希望小的排在后面,因此需要交换这两个数的位置。交换之后这 5 个数的顺序是 35...原创 2019-10-10 16:23:35 · 975 阅读 · 0 评论 -
算法介绍——桶排序
桶排序桶排序是最快最简单的排序算法。案例介绍假设班上有 5 个学生,这 5 个学生分别考了 5分、3分、5分、2分和 8分(满分是10分 ^_^)。接下来将分数按从大到小进行排序,排序后是 8 5 5 3 2。如何编写一段程序,让计算机随机读入 5 个数然后将这 5 个数从大到小输出?只需要借助一个一维数组就可以解决这个问题。首先我们需要申请一个大小为 11 的数组 int a[11...原创 2019-10-09 15:18:03 · 674 阅读 · 0 评论