6.C操作符详解,深入探索操作符与字符串处理
C操作符详解,深入探索操作符与字符串处理
C语言往期系列文章目录
往期回顾:
- C语言是什么?编程界的‘常青树’,它的辉煌你不可不知
- VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦
- C语言入门:解锁基础概念,动手实现首个C程序
- C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏
- C语言基础入门:数据类型、变量声明与创建详解
文章目录
- C操作符详解,深入探索操作符与字符串处理
- C语言往期系列文章目录
- 前言
- 一、如何求字符串长度?
- 二、算术操作符:+,-,*,/,%
- 2.1 双目操作符
- 2.1.1 + 和 -
- 2.1.2 *
- 2.1.3 /
- 2.1.4 %
- 三、赋值操作符:=和复合赋值
- 3.1 连续赋值
- 3.2 复合赋值
- 4. 单目操作符:++,-- ,+,-
- 4.1 ++ 和 --
- 4.1.1 前置++和后置++
- 4.1.2 前置- -和后置 - -
- 4.2 +(正)和 -(负)
- 5.强制类型转换
- 总结
前言
在上一篇,我们深入探讨了C语言中的数据类型和变量声明与创建,从丰富的数据类型到变量的创建、初始化和分类,这些知识为我们进一步学习C语言奠定了坚实的基础。现在,我们已经站在了C语言世界的门口,窥见了其内部的无限可能。接下来的博客,我们将继续深入C语言的精髓,一起迈向更深层次的编程之旅。
一、如何求字符串长度?
上期学完数据结构类型后,我们这期从如何求字符串长度开始?
假设有一个字符“abc”,那我们如何求出这个字符串长度呢?其实,在我们的C语言库中,有一个函数叫做strlen函数。
strlen - string length
代码演示:
#include <stdio.h>
#include <string.h>int main()
{int len = strlen("abc");//abc\0printf("%d\n", len);return 0;
}
但我们运行起来在vs中会看到报错。
其实我们还有个叫sizeof的函数,它返回的数据类型就是size_t。size_t就是unsigned int。
我们想要计算路径长度呢?
int len = strlen("F:\Users\YunShanRuo\Desktop\1.docx");printf("%d\n", len);
这时候我们会发现出了问题,
可以看到结果是30。这里是因为转义字符出了问题。通过这个例子重点是学会能够看出转义字符的作用。
二、算术操作符:+,-,*,/,%
写代码我们一定会涉及到算数,那为了计算,C语言提供了一些操作符。操作符呢也被称为运算符,不同的人对它的翻译是不一样的。有人叫他操作符,也有人叫它运算符,那其中有一组操作符叫:算术操作符。分别是: +、 - 、*、\ 、% ,都是双目操作符。
2.1 双目操作符
这些操作符又被称为,双目操作符。我们拿+号举例。
5 + 6
这个+号的左边是一个操作数,右边也是一个操作数,位于操作符两端的就是它们的操作数,我们把这样的操作符,叫做双目操作符。
2.1.1 + 和 -
运算符‘+’ 和 ‘-’ 是用来完成加法和减法的,它们都有两个操作数,位于操作符的两端就是它的操作数。
代码演示:
int main()
{int num1 = 3 + 7;printf("%d\n", num1);int num2 = 3 - 7;printf("%d\n", num2);return 0;
}
除此之外,变量还可以相加。
//10 -4int sum = num1 + num2;printf("%d\n", sum);
2.1.2 *
运算符 * ⽤来完成乘法。
int main()
{int n = 5;printf("%d\n", n * n);return 0;
}
2.1.3 /
运算符 / ⽤来完成除法。但是在C语言中又分整数除法和浮点数除法。除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
代码演示:
7 / 2 得到整数3 余数 1,这个是整数除法。
int main()
{int a = 7 / 2;//7/2=3...1printf("a = %f\n", a);printf("a = %d\n", a);return 0;
}
在屏幕上运行打印的结果,一个是3.000000,一个是3,无法得到我们想要的3.5.这时候我们就要执行浮点数除法了。
除号的两端,两个运算数必须至少有⼀个浮点数,这时C语言执行的是浮点数除法,得到的结果就是浮点数。
int main()
{float a = 7.0f / 2.0f;//7/2=3...1printf("a = %f\n", a);return 0;
}
练习题:
这段代码的结果是什么?
#include <stdio.h>int main()
{int score = 5;score = (score / 20) * 100;return 0;
}
结果是0.
如果我们改成20.0,那么这段代码的运行结果就变成了25.
#include <stdio.h>int main()
{int score = 5;score = (score / 20.0) * 100;printf("%f\n",score);return 0;
}
2.1.4 %
运算符 % 表示求模运算,即返回两个整数相除的余值。这个运算符只能用于整数,不能用于浮点数。
我们如何理解呢?其实说白了,这个就是在求余数。
int a = 7 / 2;//商int b = 7 % 2;//%取模(取余)得到是是整除后的余数printf("a=%d\n", a);printf("b=%d\n", b);
注意:取余没有浮点数的取法。也就是说取余最终操作的还是整数。
负数取余
负数求模的规则是,结果的正负号由第一个运算数的正负号决定。
#include <stdio.h>int main()
{printf("%d\n", 11 % -5); // 1printf("%d\n",-11 % -5); // -1printf("%d\n",-11 % 5); // -1return 0;
}
我们可以看到,最终结果的正负号,都是由第一个数的正负号决定的。
三、赋值操作符:=和复合赋值
在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。
int a = 0;//初始化a = 20;//赋值,= 赋值操作符
赋值操作符 = 是一个随时可以给变量赋值的操作符。
3.1 连续赋值
赋值操作符也可以连续赋值,如:
int a = 3;int b = 5;int c = 0;c = b = a + 3;//连续赋值,从右向左依次赋值的。
C语言虽然支持这种连续赋值,但是写出的代码不容易理解,也不方便调试,建议还是拆开来写,这样方便观察代码的执行细节。
b = a + 3;c = b;
3.2 复合赋值
在写代码时,我们经常可能对一个数进行自增、自减的操作,如下代码:
比如现在有个a,然后我们想让它增加10
int a = 3;a = a + 10;
像这样的过程我们可以简化,简化成+=,或者说是-=。像这样的复合赋值操作符有+=、-=、*=、/=、%=……
int a = 3;a = a + 10;a += 10;//复合赋值a = a - 4;a -= 4;//复合赋值
还有这些也是复合赋值运算符。
4. 单目操作符:++,-- ,+,-
我们回过头来想一下,前面我们学的双目操作符,是因为他有两个操作数,而现在我们介绍的单目操作符,是不是意味着它只有一个操作数。而,++、–、+(正)、-(负) 就是单目操作符的。
4.1 ++ 和 –
++分前置++和后置++,- - 也分前置 - - 和后置 - - 。++ 就是自增1 的运算。
a = a + 1a += 1a++ / ++a
前置和后置的区别是什么呢?我们得放在表达式中才能观察。
4.1.1 前置++和后置++
对于前置++的计算,我们有一个计算口诀:先++,后使用。
int a = 5;int b = ++a;//a=a+1;b=a;printf("a=%d\n", a);//6printf("b=%d\n", b);//6
对比一下后置呢?我们同样有一个计算口诀。后置++,它的计算口诀:先使用,再++。
int a = 5;int b = a++;//b=a;a=a+1;printf("a=%d\n", a);//6printf("b=%d\n", b);//5
4.1.2 前置- -和后置 - -
前置- - 和后置- -的各自计算同样有自己对应的口诀。前置- -计算口诀:先 - -,后使用,后置是:先使用,再 - -
//前置--int a = 5;int b = --a;//a=a-1;b=a;printf("a=%d\n", a);//4printf("b=%d\n", b);//4
//后置--int a = 5;int b = a--;//b=a, a=a-1printf("a=%d\n", a);//4printf("b=%d\n", b);//5
4.2 +(正)和 -(负)
这里的+是正号,-是负号,都是单目操作符。
运算符 + 对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。
+号加上不影响原先的值,也就是原先是负数后面还是负数。而-会改变原先值的正负号。
int main()
{int a = -10;int b = a;printf("%d\n", b);return 0;
}
运算符 – 用来改变一个值的正负号,负数的前面加上 - 就会得到正数,正数的前面加上 - 会得到负数。
5.强制类型转换
对于强制类型转换,不推荐大家频繁的用,我们之前在接触数据类型的时候看过,我们说可以把double的浮点数加一个’f’,从而变成float。
而这种就是强制类型转换,它的语法很简单,就是在括号中放类型。
int main()
{int a = (int)3.14;//doubleprintf("%d\n", a);return 0;
}
这时候只会打印,3,所以能不用强转就不用强转,强制类型转换也是个转换符。但其实操作符还没有讲完,之后还会进行详解。
总结
我们探讨了C语言中的字符串长度计算(strlen与sizeof)、算术操作符(+、-、*、/、%)、赋值操作符(=、+=等)及单目操作符(++、–、+、-)。同时,介绍了强制类型转换的注意事项。下期我们将介绍输入输出和分支循环。
相关文章:
6.C操作符详解,深入探索操作符与字符串处理
C操作符详解,深入探索操作符与字符串处理 C语言往期系列文章目录 往期回顾: C语言是什么?编程界的‘常青树’,它的辉煌你不可不知VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础…...
生数科技发布 Vidu 1.5 新版本,引领视频大模型新潮流
在国内视频大模型领域,生数科技一直以创新和突破而备受瞩目。近日,生数科技再度发力,发布了 Vidu 1.5 新版本,为视频创作带来了全新的变革与机遇。 Vidu 1.5 新版本在多个方面展现出了卓越的性能和创新的特点。首先,它…...
CentOS 7 aarch64停止更新后安装gcc8 —— 筑梦之路
CentOS 7.9非X86架构系统生命周期结束后(2024-6-30)配置在线可用yum源 —— 筑梦之路_centos7.9 arm-CSDN博客 以前的做法 sudo yum install centos-release-scl-rh sudo yum install devtoolset-8-buildsudo yum install devtoolset-8-gdb sudo yum i…...
WPF下 DataGrid加入序号列
先上代码: <DataGrid Name"DGV" AutoGenerateColumns"False" Grid.Row"0" Grid.Column"0" HorizontalGridLinesBrush"RoyalBlue" VerticalGridLinesBrush"Tomato" CanUserAddRows"False&qu…...
iOS UI 自动化 手势右滑退出当前页面
1、TouchAction from appium.webdriver.common.touch_action import TouchAction# 获取屏幕的宽度和高度 screen_width driver.get_window_size()["width"] screen_height driver.get_window_size()["height"]# 定义滑动的起点和终点坐标 start_x 0 en…...
《MySQL 实战教程:从零开始到高手进阶》
当然可以。下面是一篇关于MySQL的学习指南,它适合初学者到中级用户,涵盖了MySQL的基础知识、安装步骤、基本命令以及一些高级功能。 MySQL 学习指南 1. 了解 MySQL MySQL 是一个关系型数据库管理系统(RDBMS),由瑞典…...
第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞
时间轴 演示案例 TP 框架-开发-配置架构&路由&MVC 模型 TP 框架-安全-不安全写法&版本过滤绕过 TP 框架-开发-配置架构&路由&MVC 模型 参考: https://www.kancloud.cn/manual/thinkphp5_1 1、配置架构-导入使用 去thinkphp官网可以看到&…...
应用系统开发(12) Zync中实现数字相敏检波
在 Xilinx Zynq 系列(如 Zynq-7000 或 Zynq UltraScale+)中实现数字相敏检波(DSP,Digital Synchronous Detection)可以通过硬件(PL部分,FPGA逻辑)和软件(PS部分,ARM Cortex-A 处理器)的协同工作来实现。以下是一个详细的设计方法,包括基本原理和 Zynq 的实现步骤。…...
栈Stack和队列Queue
目录 一、栈 (1)用数组实现 (2)用单链表实现 (3)用标注尾结点的单链表实现 (4)用双向链表实现 2、栈的实际应用 (1)改变元素的序列 (2&am…...
uniapp 微信小程序地图标记点、聚合点/根据缩放重合点,根据缩放登记显示气泡marik标点
如图,如果要实现上方的效果: 上方两个效果根据经纬度标记点缩放后有重复点会添加数量 用到的文档地址https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.htmlMapContext.addMarkers(Object object) 添加标记点Ma…...
Percona XtraBackup备份docker版本mysql 5.7
my.cnf配置文件 [client] default_character_setutf8[mysqld] # 数据存储目录(必须手动指定) datadir/var/lib/mysql/data# 字符集 collation_server utf8_general_ci character_set_server utf8 # 二进制日志 server-id1 log_bin/var/log/mysql/binl…...
C++:关联式容器的介绍及map与set的使用
我们之前已经学习过string,vector,list,queue,priority_queue等容器,这些容器我们统称为序列式容器,因为它们的数据的逻辑结构呈线性。因为这些容器中存储的数据即便二者之间发生交换,也不会对原有的容器结构造成太大影响。 但上篇文章我们介…...
一文说清:Linux下C++静态库的封装和调用
一 引言 《一文说清:windows下C静态库的封装和调用》中说了: 静态库允许开发者在多个项目中复用代码,减少重复劳动,并增强程序的可维护性。并讲述了windows环境下创建、封装以及调用C静态库的过程。 本文则描述了,如…...
【Java 学习】数据类型、变量、运算符、条件控制语句
Java基础语法 1. 打印 Hello World !2. 变量类和数据类型2.1 什么是变量?什么是数据类型?2.2 常用的数据类型2.3 使用变量2.4 String 类数据类型2.4.1 String 类基本概念2.4.2 String 类的使用 3. 运算符3.1 算数运算符3.2 关系运算符3.3 逻辑运算符3.4 …...
【软考】系统架构设计师-数据库设计基础
数据库核心考点 三级模式-两级映射 外模式--视图 概念模式--表(模式、基本表) 内模式--物理文件 数据库设计 概念结构设计:属性冲突、命名冲突、结构冲突 逻辑结构设计:关系模式(层次模型、网络模型)…...
【Jmeter相关】
Jmeter 可以作为接口测试问题,也会涉及到性能相关的问题 一、JMeter中用户定义的变量(User Defined Variables)和用户参 数(User Parameters)的区别是什么? 在JMeter中都是用于定义和存储测试数据的方法,但它们有一…...
拍立淘按图搜索API接口系列,返回示例图参考
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解…...
OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD
若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/143852695 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 长沙红胖子Qt…...
2024RISC-V中国峰会 演讲幻灯片和视频回放均已公开
目录 一、幻灯片地址: 二、演讲视频: 一、幻灯片地址: RVSC2024/slides at main cnrv/RVSC2024 GitHub 二、演讲视频: RISC-V国际基金会的个人空间-RISC-V国际基金会个人主页-哔哩哔哩视频...
河道无人机雷达测流监测系统由哪几部分组成?
在现代水利管理中,河道无人机雷达监测系统正逐渐成为一种重要的工具,为河道的安全和管理提供了强大的技术支持。那么,这个先进的监测系统究竟由哪几部分组成呢? 河道无人机雷达监测系统工作原理 雷达传感器通过发射电磁波或激光束…...
28.<Spring博客系统⑤(部署的整个过程(CentOS))>
引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注:我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…...
OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!
【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端,全面支持Windows和macOS系统!这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说,这一更新带来了令人…...
香港站群服务器有助于提升网站在搜索引擎中的排名
拥有253个IP的服务器通常被称为多IP站群服务器。这种服务器架构主要用于集中管理多个网站,允许网站管理员通过一个后台管理系统来高效管理和更新这些网站。 一、主要特点 集中管理:多IP站群服务器通过统一的后台管理系统,可以实现对多个网站…...
YOLOX:使用自己数据集训练模型及改进--1.YOLOX环境搭建及运行
YOLOX环境搭建及运行 YOLO X网络架构是继YOLO v5后,由旷视科技于2021年提出的新一代anthor-free模型,研究者将网络分为输入端、Backbone、PAFPN及Predication,并在Predication提出Decoupled Head、Anchor-free和Multi positives(后文会详细介绍)。 本篇文章介绍如何通过官…...
PyTorch使用教程-深度学习框架
PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch PyTorch是一个广泛使用的开源机器学习框架,特别适合深度学习的应用。它以其动态计算图而闻名,允许在运行时修改模型,使得实验和调试更加灵活。PyTorch提供了强大的GPU加…...
TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞
随着区块链技术的快速发展,去中心化应用(DApp)逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用,不仅仅满足于传统的社交功能,更在区块链领域大胆探索,推出了基于其去中心化网络的…...
“乐鑫组件注册表”简介
当启动一个新的开发项目时,开发者们通常会利用库和驱动程序等现有的代码资源。这种做法不仅节省时间,还简化了项目的维护工作。本文将深入探讨乐鑫组件注册表的概念及其核心理念,旨在指导您高效地使用和贡献组件。 概念解析 ESP-IDF 的架构…...
凹凸/高度贴图、法线贴图、视差贴图、置换贴图异同
参考: 凹凸贴图、法线贴图、置换贴图-CSDN博客 视差贴图 - LearnOpenGL CN 1,Learn about Parallax(视差贴图) - 知乎 “视差贴图”的工作流程及原理(OpenGL) - 哔哩哔哩 法线与置换贴图原理讲解以及烘焙制作! - 知乎 1. Bump Mapping 凹凸贴图 BumpMap…...
ZSTD 内存泄漏问题
优质博文:IT-BLOG-CN Zstandard(简称zstd)是一种无损压缩算法,由Facebook开发并开源。它旨在提供高压缩比和高解压速度的平衡,适用于多种数据压缩需求。 特点 【1】高压缩比: zstd能够在保持较高压缩比的…...
c# npoi操作excel
今天在弄使用npoi对excel表的操作,遇到个问题就是使用workbook通过filestream打开后,让后workbook.write(filestream)居然报文件流关闭了,无法写入,弄了好久都不行,最后通过写2个excel文件来解决,现在看来我…...
网站简介 更改/八零云自助建站免费建站平台
if($category->user_id ! auth()->id()){throw new ModelNotFoundException();}...
苏州做网站公/seo系统推广
Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了。这一新特性对以往的操作方法使用没有任何影响,你也可以用新的方式来改造以往的操作方法定义。 …...
齐齐哈尔网站建设/seo排名优化价格
Item 38. Exception Safety Axioms公理,公认之理,无需证明。要证明一个欧几里得几何的定理,要借助于一系列的公理。要判断代码是否是异常安全,也有一系列的公理可以借用。------------------------------------------------------…...
出台网站集约化建设通知/做网站价格
区别: #系统级环境配置文件 /etc/profile /etc/bashrc#用户级环境配置文件 ~/.bashrc ~/.profile/etc/profile: 用来设置系统环境参数,比如$PATH. 这里面的环境变量是对系统内所有用户生效的。 /etc/bashrc: 这个文件设置系统bash shell相关的东西&a…...
上海做网站品牌/谷歌网页版
美体会帮你做很多重活的。Regex通常是HTML关注的最后手段。最好使用该产品的最新版本,如下面的代码所示。在HTML \EDUCATIONAL RESEARCHVolume: 29Issue: 2Pages: 26-152Published: JUN 1987from bs4 import BeautifulSoupsoup BeautifulSoup(HTML, "html.pa…...
巴南网站制作/武汉seo网站优化
创建一个序列(NewStudNo),初始值为10001,步长为1,最大值为99999 create sequence newstudno increment by 1 --每次增长1start with 10001 --表示从1开始计值maxvalue 99999 --有两个可选值,要么无最大值&a…...