字符串--const类型限定符、字符处理函数(修改首字母的大小写)、数值字符串向数值得转换

news2024/11/15 15:37:49

目录

一、const类型限定符

二、字符处理函数

三、数值字符串向函数值转换



一、const类型限定符

通过采用指针或数组作函数参数,可使调用者获得修改后的数据,但有时我们只希望将数据传到被调函数的内部,而并不希望它们在函数内被修改,此时,为了防止数据被意外修改,也为了让函数功能更明确(明确表示程序员的意图,不希望它们被修改),可使用const对参数进行限定。

例如:

unsigned int mystrlen(const char str[]);

或者

unsigned int mystrlen(const char *pstr);

事实上,当声明一个指针变量时,这个指针变量本身的值以及它所指向的数据都可以被声明为const。const位于声明语句中的不同位置,将表示不同的含义。

1、const放在类型关键字的前面

假设有如下变量声明语句:

int a,b;

const int *p=&a;

按照从右到左的顺序,可将这条变量声明语句读作:“p是一个指针变量,可指向一个整型常量(Integer Constant)”。它表明*p 是一个常量,而p不是。 由于*p是只读的,是不可以在程序中被修改的,所以一旦将*p作为左值在程序中对其进行赋值,将被视为非法操作。

注意:虽然这里*p的值是不可修改的,但p指向的变量a的值仍是可以修改的,即对a执行赋值操作是合法的。因指针变量p的值是可以修改的,所以这里如果执行赋值操作p=&b也是合法的,经过这个赋值之后,指针变量p不在指向变量a而是指向变量b了。

#include <stdio.h>

int main(void)
{
	int a,b;
	const int *p=&a;
	a=10;
	b=20;
	printf("%p......%d\n",p,*p);
	p=&b;
	printf("%p......%d\n",p,*p);
 } 

(2)const放在类型关键字的后面和*变量名的前面

int const *p = &a;

按照从右到左的顺序,可将这条变量声明语句读作:“p是一个指针变量,可指向一个常量整数(Constant Integer)”。它表明*p是一个常量,而p不是。由于*p是只读的,所以不能使用指针变量p修改这个“为常量的整数型”,他和第一种情况是等价的。、

(3)const放在类型关键字*的后面,变量名的前面。

int  *  const  p = &a;

按照从右到左的顺序,可将这条变量声明语句读作:“p是一个指针常量,可指向一个整型(Integer)数据”。它表明p是一个常量,而*p不是。由于p是一个常量指针,是只读的,其值是不可被修改的,所所以在执行程序中不能修改指针p,让他指向其他变量。

 

出现报错。

虽然改变不了地址,但是可以改变该地址下的数值。

(4)一个const放在类型关键字之前,另一个const放在类型关键字*之后和变量名之前。

const int * const p = &a; 

按照从右到左的顺序,可将这条变量声明语句读作:”p是一个指针常量,可只想一个整型常量(Interger Constant)“。它表明p和*p都是一个常量,都是只读的。这是,无论执行*p = 20;

 还是执行p=&a这样的操作,都将被视为非法操作。 

(pb是我自己顶一个,与p含义相同,可视为p ,上面的pa意义一样。)

强行修改出现了报错。

二、字符处理函数

字符处理函数库中包含了对于字符数据进行测试和操作的标准函数库,使用这些函数库需要程序开头包含头文件<ctype.h>

例题:输入一行字符,统计其中的英文字符,数字字符、空格和其他字符的个数。

方法1:不使用ctype.h

#include <stdio.h>
//#include <ctype.h>//隐藏去不使用
#define N 80
int main(void)
{
	char str[N];
	int i,letter = 0,digit = 0,space = 0,others = 0;
	printf("Input a string:");
	gets(str);
	for(i=0;i<str[i]!='\0';i++)
	{
		if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z')
			letter++;
		else if(str[i]>='0'&&str[i]<='9')
			digit++;
		else if(str[i]==' ')
			space++;
		else 
			others++;
	}
	printf("English character :%d\n",letter);
	printf("digit character:%d\n",digit);
	printf("space : %d\n",space);
	printf("other character:%d\n",others);
	return 0;
 } 

方法2:使用ctype.h 只需将for循环里的修改即可。

		if(isalpha(str[i]))
			letter++;
		else if(isdigit(str[i]))
			digit++;
		else if(isspace(str[i]))
			space++;
		else 
			others++;

 例题:输入名字,首字母为小写,修改首字母为大写。


#include <stdio.h>
#include <ctype.h>

#define N 80
int main(void)
{
	char name[N];
	int i;
	printf("Input a name:");
	gets(name);
	i=0;
	while(!isalpha(name[i]))
	{
		i++;
	}
	name[i] = toupper(name[i]);
	while(!isspace(name[i]))
	{
		i++;
	}
	while(!isalpha(name[i]))
	{
		i++;
	}
	name[i]=toupper(name[i]);
	printf("Formatted Name :%s\n",name);
	return 0;
}
 

 三、数值字符串向数值的转换

字符串与整型数值在内存的存储方式上有很大不同。字符串中的每个字符都是以ASCII码形式存储在一个内存单元中,占一个字节存储空间。而整型数是以二进制形式存储的。

C语言提供的字符串转换函数可将数字字符串转换为整型或浮点型的数值。使用这些函数时,必须包含头文件<stdlib.h>。

例题:演示字符串转换函数。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	char str[]={"  123.5"};
	int intNum;
	long longNum;
	double doubleNum;
	
	intNum=atoi(str);
	longNum=atol(str);
	doubleNum=atof(str); 
	
	printf("intNum=%d\n",intNum);
	printf("longNum=%ld\n",longNum);
	printf("doubleNum=%f\n",doubleNum);
	return 0;
 } 
 

 如果在编译时出现,无法运行,可以修改为这个(Dev_c++是这样的)

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

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

相关文章

Spring6 JdbcTemplate和事务

文章目录 1、JdbcTemplate1.1、简介1.2、准备工作1.3、实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 2、声明式事务概念2.1、事务基本概念①什么是事务②事务的特性 2.2、编程式事务2.3、声明式事务 3、基于注解的…

AI无处不在,科技改变生活:开放原子全球开源峰会参会感悟

目录 前言 英特尔的开源之路 拥抱人工智能 AIGC的浪潮之巅 全链路AI解决方案 极致性能优化 结束语 前言 2023年开放原子全球开源峰会 目前中国源代码贡献量已达到世界第二&#xff0c;开源软件开发者数量也已突破800万&#xff0c;居全球第二。在众多开发者的关注下&…

2.部署Keystone服务

在OpenStack的框架体系中Keystone的作用类似于一个服务总线&#xff0c;为OpenStack提供身份管理服务&#xff0c;包括用户认证&#xff0c;服务认证和口令认证&#xff0c;其他服务通过Keystone来注册服务的Endpoint&#xff08;端点&#xff09;&#xff0c;针对服务的任何调…

50 最佳实践-安全最佳实践-Libvirt鉴权

文章目录 50 最佳实践-安全最佳实践-Libvirt鉴权50.1 简介50.2 开启libvirt鉴权50.3 管理SASL 50 最佳实践-安全最佳实践-Libvirt鉴权 50.1 简介 用户使用libvirt远程调用功能时&#xff0c;如果不进行任何鉴权校验&#xff0c;所有连接到主机所在网络的第三方程序都可以通过…

一道北大强基题背后的故事(四)——数学之美,美在哪里?

早点关注我&#xff0c;精彩不错过&#xff01; 在前面文章中&#xff0c;我们重点聊了[((1 sqrt(5)) / 2) ^ 12]这道题可能的弯路&#xff0c;出题思路和这道题设计巧妙的结论&#xff0c;相关内容请戳&#xff1a; 一道北大强基题背后的故事&#xff08;三&#xff09;——什…

MTK 平台相机bringup流程

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、Camera 框架介绍二、Camera Bringup 需要配置的文件三、复盘总结 一、Camera 框架介绍 Camera 的框架分为 Kernel 部分和 hal 部分&#xff0c;其中…

需求分析引言:架构漫谈(一)

本文主要对架构的概念做一些介绍&#xff0c;并引申出需求分析的重要性。 后续准备做一个系列&#xff0c;定期介绍我工作以来的一些需求实现的案例。 注&#xff1a;因为架构的内容比较庞大&#xff0c;里面的每个点&#xff0c;都可以扩展成一系列的文章&#xff0c; 因此&am…

基于Java精品酒销售管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

PoseiSwap 即将在 6 月 18 日开启 IDO,白名单申请者超 14000 人

根据PoseiSwap官方公告&#xff0c;PoseiSwap正式确定了将在6月18日0&#xff1a;00&#xff08;UTC&#xff09;正式在Bounce上开启IDO活动&#xff0c;目前本次活动的白名单申请用户已经突破了14000人。除了Bounce外&#xff0c;PoseiSwap将陆续在BitForex&#xff08;6月23日…

uniapp + vue3 + uviewPlus 搭建多端项目框架

随着vite.js越来越受开发者青睐&#xff0c;很多大厂的项目都偏向于vue3开发&#xff0c;想着uniapp搭配vite4.x搭建多端项目效果会怎么样&#xff1f;经过一番实践发现果然不错&#xff01; 版本信息 HBuilderX: 3.8.4 Vite: 4.2.1 uView-Plus: 3.1.31初始化uniappvue3项目 …

PSINS工具箱学习(一)下载安装初始化、SINS-GPS组合导航仿真、习惯约定与常用变量符号、数据导入转换、绘图显示

文章目录 一、前言二、相关资源三、下载安装初始化1、下载PSINSyymmdd.rar工具箱文件2、解压文件3、初始化4、启动工具箱导览 四、习惯约定与常用变量符号1、PSINS全局变量结构体 glv2、坐标系定义3、姿态阵/姿态四元数/欧拉角 Cnb/qnb/att4、IMU采样数据 imu5、AVP导航参数 av…

Python基础(5)——变量

Python基础&#xff08;5&#xff09;——变量 文章目录 Python基础&#xff08;5&#xff09;——变量目标一. 变量的作用二. 定义变量2.1 标识符2.2 命名习惯2.3 使用变量2.4 认识bug 三. Debug工具3.1 打断点3.2 Debug调试3.2.1 Debug输出面板分类 四. 认识数据类型总结 目标…

【JAVA集合篇】LinkedList详解

文章目录 简介继承体系源码分析主要属性Node节点构造方法添加元素删除元素 栈总结经典面试题 简介 上篇文章我们详细分析ArrayList的使用及源码&#xff1a;【JAVA集合篇】ArrayList源码详解 &#xff0c;本章我们来聊聊LinkedList的使用及源码&#xff0c;LinkedList和ArrayL…

Ceph:关于Ceph 集群如何访问的一些笔记

写在前面 准备考试&#xff0c;整理 Ceph 相关笔记博文内容涉及,Ceph 集群四种访问方式介绍及 Demo&#xff0c;Ceph 客户端支持的操作介绍理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意…

科大讯飞星火大模型评测:从职场到日常生活,样样精通

文 | 大力财经 今年最热门的话题当属OpenAI发布ChatGPT 3.5版本&#xff0c;全球用户对此纷纷追捧。在国内领域&#xff0c;百度、阿里巴巴、字节跳动、360、腾讯和科大讯飞等厂商纷纷推出大型模型&#xff0c;加入“百模大战”的竞赛。 大模型在自然语言处理领域可以显著提高…

推荐几款适用的项目管理工具,助力您的项目更高效运作

随着企业规模的扩大和业务范围的增加&#xff0c;中小型企业近年来越来越重视项目管理。Zoho Projects 是一款适用于中小型企业的项目管理工具&#xff0c;可以帮助中小型企业更好地进行项目管理&#xff0c;提高工作效率和协作效果。 一、强大的项目管理能力 Zoho Projects提供…

华为OD机试之AI面板识别

AI面板识别 题目描述 AI识别到面板上有N&#xff08;1 ≤ N ≤ 100&#xff09;个指示灯&#xff0c;灯大小一样&#xff0c;任意两个之间无重叠。 由于AI识别误差&#xff0c;每次别到的指示灯位置可能有差异&#xff0c;以4个坐标值描述AI识别的指示灯的大小和位置(左上角…

启智平台使用教程

1.创建项目 填写完需要的信息后&#xff0c;点击“创建项目”即可。 进入到下面这个界面 2.创建调试任务 点击“新建调试任务” 算力集群推荐选择“智算网络集群” 新建项目的时候必须要选择镜像&#xff0c;可以根据自己的需要选择合适的镜像。可以把原镜像的安装包删除&…

基于html+css的图展示132

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

关于ASA搜索竞价排名广告

通过调研发现&#xff0c;60%的应用是通过搜索引擎发现的&#xff0c;这一定程度上也反映出用户需要先通过搜索引擎和社交媒体搜索寻找APP的占比较大&#xff0c;我们可以借助应用商店内的排名推荐广告&#xff0c;来改变应用被发现的渠道。 通过广告投放和ASO优化&#xff0c…