当前位置: 首页 > news >正文

函数补充与常见例题分析(杂例补充)

目录

一,atoi函数

二,isspace函数

三,isdigit函数

四,例题:

1,序列中删除指定数字

2,数组串联

3,offsetof宏的实现

4,交换奇偶位


一,atoi函数

头文件:#include <stdlib.h>

核心功能:将字符串转化为整形(int)

语法:int atoi(const char* str)

str为以'\0'结尾的要转化的字符串

如果无法有效转化就会返回0

转化特点:

1,如果遇到空格就跳过

2,可以识别正负号:正号不显示,负号显示

3,当遇到字母字符时会直接停止,当字符串中的所有数字都在字母字符后时,会直接返回0

4,遇到超出int范围的值时,大于返回int的最大值,小于返回int的最小值

注意:

当字符串中有浮点数时,atoi只会转化整数部分小数部分会直接忽略。

运用展示:

当字符串为" a+1234" 时打印0

当为" -12a34"时打印-12

当为" -12.34"时打印-12

1.模拟实现atoi函数

二,isspace函数

头文件:#include <ctype.h>

核心功能:检查字符是否空白字符

语法:int isspace(int c)

当是空白字符时返回一个非零数

当不是空白字符时返回0

C语言中的空白字符有以下几种:

三,isdigit函数

核心功能:判断字符是不是‘0’~‘9’的数字字符

头文件:#include <ctype.h>

语法:int isdigit(int c)

c为要传入的字符的ASCII码值,范围:0<=c<=255或EOF(-1)

返回值:当是‘0’~‘9’的数字字符时返回一个非零值

如果不是则返回0

用int来接收字符的原因:

1,支持文件结束符EOF(-1)

2,函数内部实现的需要

四,例题:

1,序列中删除指定数字

#include <stdio.h> int main() { int n = 0; scanf("%d",&n); //把整数输入到数组中 int arr[50] = {0};//50为最大容量 int i = 0; for(i=0;i<n;i++) { scanf("%d ",&arr[i]); } //删除值 int del = 0; scanf("%d",&del); //重排序-两个变量记录下标 int a = 0; int b = 0; for(a=0;a<n;a++) { if(arr[a]!=del) { arr[b] =arr[a]; b++; } } int k = 0; for(k=0;k<b;k++) { printf("%d ",arr[k]); } return 0; }

分析关键内容:在于最后的重新排序

上述最后的循环次序是不可更改的

在a到达要删除的数字前,b先到达,再通过判断,让a停下,在b变大前,将a处的值传给b,实现序列的更改。

2,数组串联

3,offsetof宏的实现

头文件:#include <stddef.h>

核心功能:计算结构体成员相对于首地址的偏移量

实现:#define offsetof(s,m) ((size_t)&(((s*)0)->m))

其中s为结构体类型,m为结构体成员

拆分解释:(s*)0//将0强制转化为s结构体类型的指针,这样做相当于结构体的首地址是0,同时表示结构体的首地址

((s*)0)->m) //表示结构体成员 //用指针访问成员,类似:ps->age ps为结构体指针(首地址)

((size_t)&(((s*)0)->m)) //对结构体成员取地址,并将地址值强制转化为size_t类型,由于首地址为0,所以成员的地址转化一下类型就是偏移量。

4,交换奇偶位

写一个宏,用来交换一个整数二进制的奇偶位

解析:

5,猜名次

实现思路:

使用循环创造5*5共25种情况,并判断并排除名次相同的情况,求出满足条件的情况,最后打印。

代码实现:

//猜名次 //防止重复,判断数组中是否有重复元素 int cheakdata(int* p) { //由于p[i]的范围为1~5所以创建6个空间 int tmp[6] = { 0 }; //新建一个数组,元素初始化值都为0 int i = 0; for (i = 0; i < 5; i++) //遍历p[5]中的每一个元素 { if (tmp[p[i]]) //如果不为零,说明此值已经被检测了一次,有重复元素,返回零,p[i]的范围为1~5 { return 0; } tmp[p[i]] = 1; //第一次为0,就赋值为1,之后p[i]值相同时就返回0 } return 1; //没有相同元素返回1 } int main() { int p[5] = { 0 }; //0 1 2 3 4分别表示a b c d e //五个循环嵌套,创造出5*5中情况,需要判断是否有元素相同 for (p[0] = 1; p[0] <= 5; p[0]++) { for (p[1] = 1; p[1] <= 5; p[1]++) { for (p[2] = 1; p[2] <= 5; p[2]++) { for (p[3] = 1; p[3] <= 5; p[3]++) { for (p[4] = 1; p[4] <= 5; p[4]++) { //每个人有半句话是对的 if ((p[1] == 2) + (p[0] == 3) == 1 && //b第二,a第三 (p[1] == 2) + (p[4] == 4) == 1 && //b第二,e第四 (p[2] == 1) + (p[3] == 2) == 1 && //c第一,d第二 (p[2] == 5) + (p[3] == 3) == 1 && //c第五,d第三 (p[4] == 4) + (p[0] == 1) == 1 && //e第四,a第一 cheakdata(p)) { int i = 0; for (i = 0; i < 5; i++) { printf("%d ", p[i]); } printf("\n"); } } } } } } return 0; }

执行结果:3 1 5 2 4 //a b c d e

http://www.jsqmd.com/news/1257034/

相关文章:

  • 郑州本地能上门给公司市场部做豆包商用流量GEO专项内训的机构,要求课后配套落地辅导 - 哈喽33
  • 库存控制:是什么?重要性+类型+挑战
  • 阴阳师自动化脚本OAS:基于现代Python架构的游戏自动化解决方案深度解析
  • 《设计EDA 候选人跳槽竞业风险简易自测问卷》
  • 3步快速上手大气层整合包系统:从安装到实战的完整指南
  • 如何用DyberPet打造你的专属桌面宠物?5分钟快速上手完整指南
  • WaveTools鸣潮工具箱终极指南:解锁高帧率画质与智能抽卡分析
  • 天道3 (天道中关于孝道的思辨)
  • 5步掌握mytv-android:打造你的专属IPTV电视直播体验
  • AI-HF Patch终极指南:3分钟搞定AI少女游戏增强补丁
  • VLA-世界模型-TVA:具身智能的递归改进引擎(7)
  • AIGC定义正在被重写:OpenAI内部文档泄露的「生成智能」新范式(限24小时免费解读通道)
  • 生产车间必备:进销存批量生成流程卡省时省力
  • 【CTF-MISC-数据处理与分析】使用powershell搜索大量文件包含的文字
  • 终极Windows按键映射指南:如何使用QKeyMapper免费实现游戏手柄键盘鼠标全能映射
  • 5分钟掌握AI成本控制:TikTokenizer在线分词器终极指南
  • “AI生成视频被限流”真相曝光!抖音官方技术白皮书未公开的3类AI特征识别机制(附绕过检测的合规路径)
  • 高端制造|半导体与集成电路|设计EDA赛道 总监/VP/CTO 顶层高管竞业风险核查清单(七维标准完整版)
  • X-AnyLabeling自动标注软件的安装使用指南
  • ComfyUI-BrushNet完整指南:三步掌握AI图像精准修复与编辑技术
  • WorkBuddy教程以及核心用法与使用场景
  • 开源项目第165期:superfile — 颜值与效率并重的现代终端文件管理器
  • DVWA靶场——Content Security Policy Bypass(CSP 内容安全策略)
  • 天线原理-1.引论
  • Lifecycle 使用
  • VLA-世界模型-TVA:具身智能的递归改进引擎(5)
  • 基于Python衡阳市二手房房价的影响因素分析
  • RK3588 Linux SDK配置SPI转MCP2515 CAN驱动
  • LinkSwift:告别限速困扰,九大网盘直链解析神器完全指南
  • 好客搜陈海伟:十年深耕自研,以企业文化筑牢 AI 运营技术根基