6.C操作符详解,深入探索操作符与字符串处理

C操作符详解,深入探索操作符与字符串处理

C语言往期系列文章目录

往期回顾:

  1. C语言是什么?编程界的‘常青树’,它的辉煌你不可不知
  2. VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦
  3. C语言入门:解锁基础概念,动手实现首个C程序
  4. C语言概念之旅:解锁关键字,字符,字符串的秘密,揭秘语句和注释,程序员的宝藏
  5. 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)、算术操作符(+、-、*、/、%)、赋值操作符(=、+=等)及单目操作符(++、–、+、-)。同时,介绍了强制类型转换的注意事项。下期我们将介绍输入输出和分支循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/17951.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

校园导航系统

关于数据结构的一个整理&#xff1a; 1、链式有序表的合并 2、栈 3、队列 4、二叉树、哈夫曼报文 5、图论 6、十大排序 7、校园导航系统 文章目录 校园导航系统演示示例代码示例1、弧结点和顶点节点2、Map节点3、用户 校园导航系统 采用C语言涉及了数据库相关的操作&am…

食品进出库库存管理发货开单软件下载 佳易王食品进出库管理系统操作教程

一、概述 【软件资源下载在文章最后】 食品进出库库存管理发货开单软件下载 食品进出库管理系统操作教程 商品进出库管理软件是一款操作简便的进出库管理软件&#xff0c;管理入库&#xff0c;出库&#xff0c;库存&#xff0c;同时打印发货单。 二、软件操作教程 第一步&a…

C++和OpenGL实现3D游戏编程【连载18】——加载OBJ三维模型

1、本节课要实现的内容 以前我们加载过立方体木箱,立方体的顶点数据都是在程序运行时临时定义的。但后期如果模型数量增多,模型逐步复杂,我们就必须加载外部模型文件。这节课我们就先了解一下加载OBJ模型文件的方法,这样可以让编程和设计进行分工合作,极大丰富我们游戏效…

二刷代码随想录第四天

24. 两两交换链表中的节点 设置个虚拟头节点画图理清楚节点之间的指向关系 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* dummyHead new ListNode(0);dummyHead->next head;ListNode* cur dummyHead;while (cur->next ! nullptr &&…

【Linux】proc 文件系统详解

/proc 文件系统是 Linux 内核提供的一种特殊的文件系统&#xff0c;它主要用于显示内核和进程的信息。/proc 文件系统是一个虚拟文件系统&#xff0c;这意味着它并不占用实际的磁盘空间&#xff0c;而是由内核动态生成的内容。通过 /proc 文件系统&#xff0c;用户可以读取系统…

Linux文件系统

Linux文件系统 Linux 文件系统是 Linux 操作系统中用于存储和组织文件的结构。以下是一些关键概念和常见的 Linux 文件系统类型&#xff1a; 关键概念 文件系统层次结构&#xff1a;Linux 使用统一的文件系统层次结构&#xff0c;所有文件和目录都从根目录 / 开始。 目录结构…

[1.15.X-1.18.X]Herobrine-吾王HIM插件

Herobrine 这款插件99%自定义!为你的服务器增加一个吓人的HIM&#xff0c;该插件是一个非玩家角色&#xff0c;由 Minecraft 的粉丝创建。从来没有真正成为 Minecraft 游戏的一部分&#xff0c;这个故事是他在 Minecraft 世界里出没&#xff0c;Mojang 通过开玩笑地将“移除的 …

CTF 取证技术

01 流量分析 筛选器的使用 追踪流 文件导出 实例&#xff1a;通过筛选 http ,推断出 攻击者很可能 是 执行一个 文件上传 的攻击hack.php 很可能就是 攻击者 上传的 webshell依次进行 http 的 追踪流 查看查看到最后&#xff0c;发现响应中 有 PK文件头的存在 &#xff0c;说…

【GPIO】3.上/下 拉电阻通讯中的作用

一.什么是上/下拉电阻 上拉、下拉电阻统一称为拉电阻&#xff0c;作用是将状态不确定的信号线通过一个电阻将其箝位至高电平&#xff08;上拉&#xff09;或低电平&#xff08;下拉&#xff09; 这里有人可能会疑惑&#xff1f; 什么叫状态不确定的信号&#xff1f; 在数字电…

分享购:前期布局与后期问题解决策略

在当今电商与消费模式不断创新的时代&#xff0c;分享购作为一种极具潜力的商业模式&#xff0c;正受到越来越多的关注。然而&#xff0c;要想让分享购真正发挥优势、实现可持续发展&#xff0c;无论是前期的精心布局&#xff0c;还是后期妥善应对各类问题&#xff0c;都至关重…

51c大模型~合集46

我自己的原文哦~ https://blog.51cto.com/whaosoft/11908179 #HITS 北大李戈团队提出大模型单测生成新方法&#xff0c;显著提升代码测试覆盖率 单元测试是软件开发流程中的一个关键环节&#xff0c;主要用于验证软件中的最小可测试单元&#xff0c;函数或模块是否按预期工作…

中断与异常处理:走进代码

在操作系统的核心部分&#xff0c;中断&#xff08;Interrupt&#xff09;和异常&#xff08;Exception&#xff09;的处理机制是不可或缺的基础。它们的设计决定了系统的响应能力、稳定性和可扩展性。本文将深入探讨 Linux 内核中的中断与异常处理机制&#xff0c;并结合更多实…

智慧社区管理系统平台全面提升物业管理效率与用户体验

内容概要 随着科技的发展&#xff0c;智慧社区管理系统平台应运而生&#xff0c;成为现代物业管理的重要工具。这个平台通过整合多种先进的管理手段&#xff0c;为物业服务提供了全新的解决方案。智慧社区管理系统的核心在于其高效、便捷、智能的特点&#xff0c;最大程度地提…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程&#xff08;9&#xff09;&#xff1a;使用 数据表&#xff08;DataTable 参数&#xff09; 来传递参数 前言一、什么是 datatable 参数&#xff1f;Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

Java学习——Day10

static修饰的成员变量和方法&#xff0c;从属与类。普通变量和方法从属于对象的 静态块就是类在初始化的执行的语句块&#xff0c;静态块中常调用静态变量和静态方法。 以下编写一段代码举个例子 Java参数传值机制 java中&#xff0c;方法中所有参数都是“值传递”&#xff…

StructRAG Boosting Knowledge 论文笔记

StructRAG: Boosting Knowledge Intensive Reasoning of LLMs via Inference-time Hybrid Information Structurization 论文精读 背景知识 知识密集型推理任务&#xff08;knowledeg- intensive reasoning task&#xff09;: 知识密集型推理任务&#xff08;knowledge-inte…

【点云上采样】最近邻插值上采样算法 增加点云密度

看了很多文章都是用CGAL去做的&#xff0c;又是下载安装CGAL的贼麻烦&#xff0c;关键弄好还不能用&#xff0c;气死了。 文章目录 前言一、最近邻插值上采样算法1、原理&#xff1a;2、步骤&#xff1a; 二、完整代码三、效果对比 前言 传感器采集到的点云比较稀疏&#xff0…

C++仿函数

概念 仿函数本质上是一个类&#xff08;class&#xff09;或者结构体&#xff08;struct&#xff09;&#xff0c;不过这个类重载了函数调用运算符 operator()&#xff0c;使得它的实例对象可以像函数那样被调用。从使用方式上看&#xff0c;它能表现出类似函数的行为&#xf…

【Linux进程基础篇】总结 | => 进程环境变量(超详细)

-------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤&#xff1a;Never frown&#xff0c; even when you are sad&#xff0c; because you never know who is falling in love wi…

PowerBI 无法拖动字段到组件上

今天在做PowerBI时发现一个奇怪的问题。 本来好好的报表&#xff0c;突然无法拖动字段到组件上。 后来在网上搜索相关问题&#xff0c;发现原因可能是因为"隐式度量值"被禁用。 就是说报表无法自动聚合计算&#xff0c;所以无法拖动字段到组件上。 正确的: 有问题…