C语言之字符串处理

news2024/11/16 17:36:32

目录

字符串长度

显示字符串

数字字符的出现次数

大小写字符转换

 字符串数组的参数传递

非字符串的字符数组


目前我们所学习到的是围绕字符串的处理,仅仅是生成字符串、读取并显示字符串,下面我学习更加灵活处理字符串的方式。


字符串长度

我们来看下述语句声明的数组:

char str[6] = "ABC";

元素个数为6的数组保存了元素个数为3的(算上字符串末尾的null字符,则长度为4)的字符串,因此str[4] str[5]都是空的,由此可知字符串不一定正好撑满字符组。

因为字符串含有表示末尾的null字符,所以第一个字符到\0为止的前一个字符就是该字符串的长度,我们可以据此来计算字符串的长度:

#include<stdio.h>

/*返回字符串str的长度*/
int str_length(const char s[])
{
	int len = 0;
	while(s[len])
		len++;
	return len;
}
 int main()
{
	char str[128];
	
	printf("请输入字符串:");
	scanf("%s", str);
	
	printf("字符串\"%s\"的长度为%d.\n", str, str_length(str));
	
	return 0;
}

让我们来分析程序时如何执行的:

1.main函数在调用str_length函数传入的实参str,通过前面的学习可知,实参只有给出数组名称就可以了

2.通过数组的传递,函数str_length所接受的s就是main函数中的str本身

3.在str_length函数中使用变量len,遍历数组使用计算字符串的长度。

4.while语句中表达式正是数组,通过len++是数组下标逐个增加,进而判断数组元素是否为0,即字符串结束的标志“\0”。

下面我们来演示下在遍历过程中使用while语句是如何判断的:


显示字符串

这次我们不使用printf和puts函数,而只使用putchar函数显示字符串:

#include<stdio.h>

/*显示字符串s*/
void put_string(const char s[])
{
	int i = 0;
	while(s[i])
		putchar(s[i++]);
}
 int main()
{
	char str[128];
	
	printf("请输入字符串:");
	scanf("%s", str);
	printf("你输入了:");
	
	put_string(str);
	
	printf("。\n");
	
	return 0;
}

在本程序中对字符串中字符进行遍历时使用的while语句对null字符的查找方式一样。


数字字符的出现次数


#include<stdio.h>

/*将字符串s出现的数字字符保存在数组cnt中*/
void str_dcount(const char s[], int cnt[])
{
	int i = 0;
	while(s[i])
	{
		if(s[i]>='0' && s[i]<='9')
			cnt[s[i] - '0']++;
		i++;
	}
}
int main()
{
	int dcnt[10] = {0};
	char str[128];
	int i;
	
	printf("请输入字符串:");
	scanf("%s", str);
	
	str_dcount(str, dcnt);
	
	puts("字符出现的次数");
	
	for(i=0;i<10;i++)
		printf("'%d' :%d\n", i, dcnt[i]);
	
	return 0;
}

大家可能对程序中下面的代码部分有些生疏:

if(s[i]>='0' && s[i]<='9')
			cnt[s[i] - '0']++;
		i++;

特别是关于cnt数组,中表达式的运算:任意的字符减去‘0’,都能得到所需要的下标值

大家可以看下面这个文章是关于字符的介绍:https://blog.csdn.net/W06164932/article/details/135150160?spm=1001.2014.3001.5502


大小写字符转换

我们来编写两个函数,一个字符串中所有的字符转换为大写字母,一个全部转换为小写字母

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

/*将字符串的字符全部转化为大写*/
void str_toupper(char s[])
{
	int i = 0;
	while(s[i])
	{
		s[i] = toupper(s[i]);
		i++;
	}
}
/*将字符串的字符全部转换为小写*/
void str_tolower(char s[])
{
	int i = 0;
	while(s[i])
	{
		s[i] = tolower(s[i]);
		i++;
	}
}

int main()
{
	char str[128];
	
	printf("请输入字符串:");
	scanf("%s", str);
	
	str_toupper(str);
	printf("大写字母:%s\n", str );
	
	str_tolower(str);
	printf("大写字母:%s\n", str );

	return 0;
}

我们分别来看下关于toupper函数与tolower函数:

toupper
头文件#include<ctype.h>
原型int toupper(int c);
说明将小写字母转换为大写字母
返回值若c是小写字母,则返回转换后的大写字母,否则之间返回c
tolower
头文件#include<ctype.h>
原型int tolower(int c);
说明将大写字母转换为小写字母
返回值若c是大写应为字母,则返回转换后的小写字母,否则之间返回c

在使用这两个函数遍历字符串过程中,当发现目标字符s[i],会为其赋这些函数的返回值。

如果这两个函数是接受的是英文字母以外的字符,则原封不动的返回这些字符


 字符串数组的参数传递

#include<stdio.h>

void put_strary(const char s[][6], int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("s[%d]=\"%s\"\n", i, s[i]);
	}
}
int main()
{
	char cs[][6] = {"max", "mike", "HELLO"};
	put_strary(cs, 3);
	
	return 0;
}

在二维数组的形参声明中只有,只有第一维的数组元素数可以省略。


非字符串的字符数组

看如下声明:

char str[4] = {"ABCD'}; 

算上null字符需要5个字符空间,但数组只能接受4个字符,但是像下面这样进行声明,末尾就会不会加上null字符:

char str[4] = {'A', 'B', 'B', 'D'};

这样声明的变量末尾不会加上null字符,我们把它当做4个字符的集合,也就是“普通的数组”

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

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

相关文章

MR实战:统计总分与平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启…

单词搜索 II[困难]

一、题目 给定一个m x n二维字符网格board和一个单词&#xff08;字符串&#xff09;列表words&#xff0c; 返回所有二维网格上的单词。单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同…

面试官:并发和并行的区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

UDP协议工作原理及实战(二)UDP客户端代码实现

这个是一个测试我们写的函数是否正确。 启动服务&#xff1a;这里边的udpsocket->bind(port)就是对端口号进行连接。

Sectigo和Certum的IP证书区别

IP证书是比较特别的一款数字证书。大多数SSL数字证书都是针对域名站点的数字证书&#xff0c;比如单域名SSL证书、多域名SSL证书和通配符SSL证书&#xff0c;而IP证书针对的是只拥有公网IP地址的站点。签发IP证书的CA认证机构并不多&#xff0c;Sectigo和Certum旗下都有IP证书&…

【网络安全】深入理解web安全攻防策略

前言 互联网时代&#xff0c;数据安全与个人隐私信息等受到极大的威胁和挑战&#xff0c;本文将以几种常见的攻击以及防御方法展开分析。 1. XSS (跨站脚本攻击) 定义&#xff1a;通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击…

前端简单动态圣诞树动画(HTML、js、css)

效果展示&#xff1a; 注释&#xff1a; 整体圣诞树分为3个部分&#xff0c;书的主干、粒子特效、树上的卡片树上的卡片(重点)&#xff1a;每一张卡片上都有一个名字&#xff0c;代表圣诞树的叶子&#xff0c;后面可以根据自己需求更改&#xff0c;比如全部改成喜欢人的名字&am…

最大公约和最小公倍数 C语言xdoj183

问题描述&#xff1a; 输入两个正整数 m 和 n&#xff0c;求其最大公约数和最小公倍数。 输入说明&#xff1a; 输入两个正整数 m 和 n。 输出说明&#xff1a; 输出 m 和 n 的最大公约数和最小公倍数。 输入样例&#xff1a; 8 12 输出样例&#xff1a; 4 24 #include <std…

【自然语言处理】第3部分:识别文本中的个人身份信息

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

linux系统 CentOS Tomcat 部署论坛

jdk安装命令&#xff1a;yum -y install java-1.8.0-openjdk-devel.x86_64 结尾上显示下图为成功 检查jdk环境是否配置成功命令&#xff1a;java -version或javac 显示版本 显示信息 mysql安装&#xff1a; 检查是否存mariadb数据库&#xff1a;rpm -qa | grep mariad 卸载ma…

基于JetCache整合实现一级、二级缓存方案(方案实现)

目录 一、整体方案说明 1.1 需求说明 1.2 整体方案实现组件结构图 二、Caffeine缓存实现 2.1 组件说明 2.2 组件结构图 2.3 组件Maven依赖 2.4 组件功能实现源码 2.4.1 CaffeineCacheManager扩展实现 2.4.2 CaffeineConfiguration配置类实现 2.4.3 涉及其他组件的类 …

Java EE 网络原理之HTTP 响应详解

文章目录 1. 认识"状态码"(status code)2. 通过 form 表单构造 HTTP 请求3. 通过 ajax 构造 HTTP 请求 1. 认识"状态码"(status code) 表示了这次请求对应的响应&#xff0c;是什么样的状态 &#xff08;成功&#xff0c;失败&#xff0c;其他的情况&…

Vue学习之第一、二章——Vue核心与组件化编程

第一章. Vue核心 1.1 Vue简介 1.1.1 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 1.1.2 Vue特点 遵循 MVVM 模式编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发它本身只关注 UI, 也可以引入其它第三方库开发项目 1.2 初始Vue 这里可以参考&a…

Kali Linux如何启动SSH并在Windows系统远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

Java 基础学习第一弹

1. equels和的区别 equals方法用于比较对象的内容是否相等&#xff0c;可以根据自定义的逻辑来定义相等的条件&#xff0c;而操作符用于比较对象的引用是否相等&#xff0c;即它们是否指向同一块内存地址。equals方法是一个 实例方法&#xff0c;可以被所有的Java对象调用&…

文章解读与完整程序——《考虑“源-荷-储”协同互动的主动配电网优化调度研究》

摘要&#xff1a;伴随智能电网的建设和清洁能源的开发利用,配电网中的负荷类型呈现多元化发展,分布式电源、可控负荷、储能等资源的增加让单向潮流的传统配电网逐渐向双向潮流的主动配电网结构转变。在能源结构转变的同时,清洁能源自身的随机性和波动性给配电网带来了更大的调峰…

再获认可!棱镜七彩荣获ISC2023数字安全创新能力百强

12月27日&#xff0c;由北京经济和信息化局、通州区政府指导&#xff0c;中关村科技园区通州园管理委员会、ISC 平台主办&#xff0c;北京通州发展集团有限公司、赛迪顾问协办的数字安全技术创新论坛暨ISC 2023数字安全创新能力百强颁奖典礼在北京阳光国际会议中心成功举办&…

YOLOv8可视化:引入多种可视化CAM方法,为科研保驾护航

💡💡💡本文内容:调用pytorch下的CAM可视化库,支持十多种可视化方法,打开“黑盒”,让YOLOv8变得相对可解释性 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适…

实习知识整理10: 渲染默认地址以及实现渲染并选择其他地址

1. 渲染默认地址思路分析 &#xff08;1&#xff09;如果我们需要获取到默认地址可以通过userId从地址表中查找&#xff0c;因为从商品详情页点击购买按钮时&#xff0c;只传递商品的相关信息&#xff0c;所以我们就需要从session中获取用户的信息userId &#xff08;2&#…