字符串函数

读取字符串的函数

1.gets()函数

说明:gets函数简单易用,它读取整行输入,直至遇到换行符,然后丢掉换行符,储存其余字符,并在末尾添加一个空字符使其成为一个C字符串。它经常和puts()函数配对使用。

在使用scanf()输入一个字符后,回车,而下面的gets()函数就直接接收了这个\n,因此无法读取外部输入。

但gets()函数存在一个严重的缺陷,这个缺陷就是:它不会检查数组是否能够装的下输入行,这可能导致大问题。

2.fgets()函数(不是所有的编译器都支持例如CodeBlocks)

fgets()和gets()的区别:

1.fgets()函数通过的第2个参数指明了读入字符的最大数量。如果给参数的值是n,那么fgets()将读入n-1个字符,或者遇到第一个换行符为止。

2.如果fgets()读到一个换行符,会把它储存到字符串中。这点与gets()不同,gets()会丢弃换行符。

3.fgets()函数第3个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,该标识符定义在stdio.h中。

因为fgets()函数把换行符放在字符串的末尾(假设输入行不溢出),通常要与fputs()函数(和puts()类似)配对使用,除非该函数不在字符串末尾加换行符。fputs()函数的第2个参数指明它要写的文件。如果要显示在计算机显示器上,应使用stdout(标准输出)作为该参数。

3.scanf()函数

1.scanf以下一个空白字符(空行、空格、制符表或换行符)作为字符串的结束。

2.如果指定了字段宽度,如%10s,那么scanf()将读取10个字符或读到第一个空白字符停止(先满足的条件是结束输入的条件)

4.getchar()函数

getchar()函数一次只能输入一个字符。

输出字符串的函数

1.puts()函数

1.puts()函数在显示字符串时会自动在其末尾添加一个换行符。

2.有双引号括起来的内容是字符串常量(只能是字母和数字,不能是中文),且被视为该字符串的地址。

3.数组名也被看作是地址。

2.fputs()函数(编译器不一定支持)

fputs()函数的第2个参数指明它要写的文件。如果要显示在计算机显示器上,应使用stdout(标准输出)作为该参数。

3.printf()函数

和puts()函数一样,printf()也把字符串的地址当作参数。虽然printf()函数没有puts()函数那么方便且计算机执行的时间也更长,但它更多才多艺,因为它可以格式化不同的数据类型。

4.putchar()函数

只能输出一个字符,通常与getchar()搭配使用。

处理字符串的函数

C库提供了多个处理字符串的函数,ANSI C把这些函数的原型放在string.h头文件中。其中最常用的函数有strlen()、strcat()、strcmp()、strncmp()、strcpy()和strncpy()。另外,还有sprintf()函数,其原型在stdio.h头文件中。

1.strlen()函数

格式:strlen(s);

s可以是字符数组名或是字符串。

用于统计字符串的长度。

2.strcat()函数

格式:strcat(a,b);

a只是字符数组名,b可以是字符数组名或是字符串常量。

strcat()(用于拼接字符串)函数接受两个字符串作为参数,该函数把第2个字符串的备份附加在第1个字符串末尾,并把拼接后形成的新字符串作为第1个字符串,第2个字符串不变。strcat()函数的类型是char*(即,指向char的指针)。该函数返回第1个参数。

3.strncat()函数

格式:strncat(a,b,n);

a只是字符数组名,b可以是字符数组名或是字符串常量,n是一个整型常量。

strcat()函数无法检测第1个数组是否能容纳第2个字符串,当然可以用strlen()查看第1个数组的长度。注意,要给拼接后的字符串长度加1才够空间存放末尾的空字符,或者,用strncat(),该函数的第3个参数指定了最大添加字符数。例如strncat(a,b,10);将b字符串的内容附加给a,在加到第10个字符或遇到字符串时停止。因此,算上空字符(无论哪种情况都要添加空字符),a数组应该足够大,以容纳a字符串(不包括空字符)、10个字符和末尾的空字符。

4.strcmp()函数

格式:strcmp(a,b);

a可以是字符数组名或是字符串常量,b可以是字符数组名或是字符串常量。

比较过程是从两个字符串的起始位置开始,依次比较对应位置上字符的ASCII码值的大小如果ASCII码值相等,则继续比较下一个字符,否则,ASCII码值大的字符串大。直到遇到不同字符或‘\0’时比较结束。

a与b相同时,strcmp(a,b)的值为0;

a大于b时,strcmp(a,b)的值为一个正数;

a小于b时,strcmp(a,b)的值为一个负数;

其它系统可能返回两者的ASCII码之差。

注意:1.该函数比较的是字符串,不是字符,所以其参数应该是字符串(例:”apple“和”A“),而不是字符(‘A’)。

2.strcmp()比较所有的字符,不只是字母。

5.strncmp()函数

格式:strncmp(a,b,n);

用法与strcmp相似,直到第n个字符。

6.strcpy()函数

格式:strcpy(a,b);

功能:把b复制到a中。

a只是字符数组名,b可以是字符数组名或是字符串常量。

a数组的长度应不小于b数组的长度,以保证能够存储b数组。

该函数还有两个有用的属性:

1.strcpy()的返回类型是char*,该函数返回的是的一个参数的值,即一个字符的地址。

2.第1个参数不必指向数组的开始。这个属性可以用于拷贝数组的一部分。

7.strncpy()函数

格式:strncpy(a,b,n);

功能:把字符串b的前n个字符复制到a中。

8.sprintf()函数

格式:sprintf(s,"%s%s",a,b);

该函数声明在stdio.h中,而不是string.h中。该函数与printf()类似,但它是把数据写入字符串,而不是打印在显示器上。因此该函数可以把多个元素组合成一个字符串。sprintf()的第1个参数是目标字符串的地址。其余参数和printf()相同,即格式字符串和代写入项的列表。

功能:1、可以控制精度

char str[20];

double f=14.309948;

sprintf(str,”%6.2f”,f);

2、可以将多个数值数据连接起来

char str[20];

int a=20984,b=48090;

sprintf(str,”%3d%6d”,a,b);

str[]=”20984 48090”

3、可以将多个字符串连接成字符串

char str[20];

char s1[5]={‘A’,’B’,’C’};

char s2[5]={‘T’,’Y’,’x’};

sprintf(str,”%.3s%.3s”,s1,s2);

%m.n在字符串的输出中,m表示宽度,字符串共占的列数;n表示实际的字符数。%m.n在浮点数中,m也表示宽度;n表示小数的位数。

 sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时在它们中间插入别的内容,总之非常灵活)。比如:
  
  char* who = “I”;
  char* whom = “CSDN”;
  sprintf(s, “%s love %s.”, who, whom); //产生:“I love CSDN. "
  
  char a1[] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’};
  char a2[] = {‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’};
  如果:
  sprintf(s, “%s%s”, a1, a2); //Don’t do that!
  十有八九要出问题了。是否可以改成:
  sprintf(s, “%7s%7s”, a1, a2);
  也没好到哪儿去,正确的应该是:
  sprintf(s, “%.7s%.7s”, a1, a2);//产生:“ABCDEFGHIJKLMN”
  这可以类比打印浮点数的”%m/nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:
  sprintf(s, “%.6s%.5s”, a1, a2);//产生:“ABCDEFHIJKL”
————————————————
有参考过:https://blog.csdn.net/weixin_45525272/article/details/104480563

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

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

相关文章

从零开始的RISC-V模拟器开发(一)环境搭建

前言 博主这系列文章是跟随中科院吴伟老师的b站公开课:[完结]从零开始的RISC-V模拟器开发第一季2021春季_哔哩哔哩_bilibili 记录的笔记。仅供学习使用,侵删! 苦逼的博主现在自己毕设也是要设计类似的东西。哎。我需要做的是给一个现成的 R…

STM32 MAP文件

文章目录 1 生成Map2 map中概念3 文件分析流程3.1 Section Cross References3.2 Removing Unused input sections from the image(移除未使用的段)3.3 Memory Map of the image(映像的内存分布)3.3.1 加载域3.3.2 运行域 4 代码运…

机器学习探索计划——KNN算法流程的简易了解

文章目录 数据准备阶段KNN预测的过程1.计算新样本与已知样本点的距离2.按照举例排序3.确定k值4.距离最近的k个点投票 scikit-learn中的KNN算法 数据准备阶段 import matplotlib.pyplot as plt import numpy as np# 样本特征 data_X [[0.5, 2],[1.8, 3],[3.9, 1],[4.7, 4],[6.…

软件测试:超详细的Jmeter基础教程

JMeter 介绍: 一个非常优秀的开源的性能测试工具。 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来。 从性能工具的原理划分 Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分: &#xff…

基于springboot实现高校食堂移动预约点餐系统【项目源码】

基于springboot实现高校食堂移动预约点餐系统演示 Java语言简介 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备…

rancher2.6 docker版本部署

1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注: 上面命令中rancher的版本v2.6.5,仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本,在github上查看:Release Release v2.6.5 ranche…

2023 年 认证杯 小美赛 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 cs数模团队在认证杯 小美赛前为大家提供了许多资料的内容呀&am…

基于springboot实现乒乓球预约管理系统项目【项目源码】

基于springboot实现乒乓球预约管理系统演示 系统的开发环境 浏览器:IE 8.1(推荐6.0以上) 开发使用语言:JAVA JDK版本:JDK_8 数据库管理系统软件:Mysql 运行平台:Windows 7 运行环境&#…

破案现场:Docker容器资源限制导致的oom问题

破案现场:Docker容器资源限制导致的oom问题 01 事故现场02 问题定位03 对症下药04 后记 原文来自于微信公众号“运维之美” https://mp.weixin.qq.com/s?__bizMzA5NDY1MTM3MA&mid2247484902&idx1&sn8394aefd884ee09ea546fcd400dd233c&chksm904a136…

是否有无限提取的代理IP?作为技术你需要知道这些

最近有互联网行业的技术小伙伴问到,有没有可以无限提取的代理IP?就是比如我一秒钟提取几万、几十万次,或者很多台机器同时调用API提取链接,这样可以吗?看到这个问题,不禁沉思起来,其实理论上是存…

python基础教程:动态参数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python的动态参数有两种,分别是*args和**kwargs, 这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别&#…

js粒子效果(二)

效果: 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Particle Animation</title><…

一篇文章让你入门python集合和字典

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、集合: 增加 add 删除 del 删除集合 discard(常用)删除集合中的元素 &#xff0c;删除一个不存在的元素不会报错 remove 删除一个不存在的元素会报错 pop随…

【点云surface】Poisson表面重建

1 介绍 Poisson表面重建算法是一种用于从点云数据生成平滑曲面模型的算法。它基于Michael Kazhdan等人在2006年发表的论文《Poisson surface reconstruction》。该算法通过将点云数据转换为体素表示&#xff0c;并利用Poisson方程来重建曲面。 该算法的基本原理是将点云数据转…

训练日志——wandb

目录 安装与登录基础使用与可视化常用函数wandb.init()wandb.config()wandb.log()wandb.finish()wandb.watch() 参考 安装与登录 安装 pip install wandb注册并登录 https://wandb.ai/site客户端登陆 在终端中输入wandb login 然后出现You can find you API key的一串网站&am…

【MinIO】几个有用的方法

在windows总安装Minio 进入网址 在Windows安装时&#xff0c;选择相应的exe文件下载&#xff0c;下载到本地后&#xff0c;使用如下的命令即可在前台启动&#xff1a; minio.exe server D:\your_path 或者将该路径写进环境变量的path中&#xff0c;用来为minio指定数据存储…

【Java程序员面试专栏 专业技能篇】Java SE核心面试指引(三):核心机制策略

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:核心机制策略,子节点表示追问或同级提问 异常处理 …

想当老师应该去学什么专业

专业选择是决定未来职业发展的重要步骤&#xff0c;如果你也想成为一名老师&#xff0c;那么这五个专业可能会适合你&#xff01; 教育学专业 教育学专业是培养教育理论和方法的学科&#xff0c;这些理论知识将帮助你理解教学过程、学生发展、课程设计和评估。该专业将让你全面…

【沐风老师】在3dMax中如何把对象随机散布在表面上?

在3dMax中如何把对象随机散布在表面上&#xff1f; 在这个教程中&#xff0c;给大家讲解在3dMax中如何把对象随机散布到另一个对象的表面上。有不少3dMax的初学者在将对象分布在随机表面上时感到手足无措。如果&#xff0c;将每个对象手动放置在表面上并花时间调整每个对象根本…

怎么当代课老师教学生

老师朋友们&#xff0c;有没有帮忙当过代课老师呢&#xff1f;或者&#xff0c;没当过的老师是不是对这种职业充满了好奇&#xff1f;让我来分享一下&#xff0c;当代课老师的日常是什么样的吧&#xff01; 备课 说起备课&#xff0c;那可是个大工程&#xff01;不过&#xff…